我正在构建 Angular2 通用应用程序并正在集成 ng2-translate .
服务器端我需要知道用户的语言,我可以从ExpressJS 得到。通过 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
});
}
然后我不知道如何在我的 app.node.module.ts
中传递或访问它们,我在其中设置了 ng2-translate
服务器。
有没有办法从 Angular Universal 应用程序(服务器端)访问这些值?怎么办?
最佳答案
对于那些感兴趣的人,解决方案是使用 Zone
,这样做时需要注意一些事项。
首先,要确保 TypeScript 解析器不会中断,您还需要在使用 Zone
的文件顶部声明:
declare var Zone: any;
或者我猜你可能会安装所有类型,但我还没有测试过。
然后,在 Node 中的任何地方只有模块你可以通过执行以下操作获取传递给 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']
}
关于node.js - 在 Angular Universal 应用程序中从 Express JS 获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41395893/