1

我正在尝试使用universal和angular4 ..一切正常,也可以通过哈希路由直接访问..但问题是请求总是显示<body><demo-app></demo-app></body>

我希望里面有一些html标签和信息<demo-app></demo-app>

这是我如何实现的:

@NgModule({
  bootstrap: [AppComponent],
  imports: [
    BrowserModule.withServerTransition({
      appId: 'my-app-id'
    }),
    ServerModule,
    ServerTransferStateModule,
    AppModule
  ]
})

export class ServerAppModule {

  constructor(private transferState: TransferState,
  private translateService: TranslateService){
    translateService.use('en');
  }
  // Gotcha
  ngOnBootstrap = () => {
    this.transferState.inject();
  }
}


app.engine('html', ngExpressEngine({
  bootstrap: ServerAppModule
}));

app.set('view engine', 'html');
app.set('views', 'src');


app.get("*", (req, res) => {
  console.time(`GET: ${req.originalUrl}`);
  res.render('../dist/index', {
    req: req,
    res: res
  });
  console.timeEnd(`GET: ${req.originalUrl}`);
});

我的版本是 "@angular/common": "^4.0.0"

使用https://github.com/angular/universal/blob/master/modules/ng-express-engine/src/main.tsimport { ngExpressEngine } from '@nglibs/universal-express-engine'

在这个讨论之后,我可以看到这是一个新的实现

尝试按照建议导入,但不起作用(命名空间不存在)

  • 从“@universal/ng-express-engine”导入 { ngExpressEngine}

按照此拉取请求中的建议使用版本 rc.5 进行了测试。

最后,按照这个链接

https://github.com/angular/universal/tree/master/modules/ng-express-engine

用这个库测试给了我同样的结果:

import { ngExpressEngine } from '@nguniversal/express-engine';

至少项目正在运行,所以我可以继续编码和使用它..但期待有一个完整的服务器端渲染。

谢谢!

4

2 回答 2

2

对于带有平台服务器的 Angular 4+,使用官方@nguniversal/express-engine,另一个看起来像是某人出于某种原因发布的旧版本的 express-engine?

命名空间现在将是@nguniversal,所以试一试,你应该没问题!

您可以在此处找到有关最新通用快速引擎(适用于 Angular 4+ 和平台服务器)的文档:

https://github.com/angular/universal/tree/master/modules/ng-express-engine

于 2017-04-25T15:17:46.353 回答
0

感谢@mark-pieszak 的关注和支持!

我可以使用https://github.com/clbond/angular-ssr使其工作,使用 angular-material 和一切.. 非常好 =)

于 2017-07-12T12:24:10.730 回答