在 Angular 个通用应用程序中从 Express JS 获取值

Get vaues from ExpressJS in Angular Universal app

我正在构建一个 Angular2 通用应用程序并且我正在集成 ng2-translate

服务器端我需要知道用户的语言,我可以从 ExpressJS via request.acceptsLanguages() (see docs).

我确实在 server.ts 中正确获取了这些值,如下所示:

function ngApp(req: any, res: any) {
  let supportedLangs = req.acceptsLanguages();
  console.log('supportedLangs', supportedLangs);
  res.render('index', {
    req,
    res,
    ngModule: AppModule,
    preboot: false,
    baseUrl: '/',
    requestUrl: req.originalUrl,
    originUrl: req.hostname
  });
}

然后我不知道如何在我为服务器设置 ng2-translateapp.node.module.ts 中传递或访问它们。

有没有办法从 Angular 通用应用程序(服务器端)访问这些值?怎么样?

对于那些感兴趣的人,解决方案是使用 Zone,并且在这样做时需要注意一些事项。

首先,要确保 TypeScript 解析器不会中断,您还需要在您使用的文件顶部声明:Zone:

declare var Zone: any;

或者我猜你可能会安装所有类型,但我还没有测试过。

然后,在节点中的任何地方只有模块你可以通过这样做在 server.ts 文件中获取传递给 res.render 的参数:

let req = Zone.current.get('req');

最后,您可以在 server.ts 中访问传递给 req 的任何属性,例如:

req.headers['user-agent'];

更新 ANGULAR 5

正如评论中指出的那样,之前的代码不再有效。好消息是 Angular 5 更简单直接:

import { Injector } from '@angular/core';
import { REQUEST } from '@nguniversal/express-engine/tokens';

constructor(
    private _injector: Injector
) {
    const req = this._injector.get(REQUEST);
    // use as: req.headers['whatever-is-in-the-headers']
}