don*_*don 4 node.js express angular2-universal angular
我正在构建一个 Angular2 通用应用程序,我正在集成ng2-translate。
服务器端我需要知道用户,这我可以从得到的语言ExpressJS通过request.acceptsLanguages()(见文档)。
我确实正确地获得了这些值,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
});
}
Run Code Online (Sandbox Code Playgroud)
然后我不知道如何在我为服务器app.node.module.ts设置的地方传递它们或访问它们ng2-translate。
有没有办法从 Angular Universal 应用程序(服务器端)访问这些值?如何?
对于那些感兴趣的人,解决方案是使用Zone,这样做时需要注意一些事项。
首先,为了确保 TypeScript 解析器不会中断,您还需要在您使用的文件的顶部声明Zone:
declare var Zone: any;
Run Code Online (Sandbox Code Playgroud)
或者我猜您可能会安装所有类型,但我还没有测试过。
然后,在任何地方节点模块只有你可以传递给参数res.render的在server.ts做这个文件:
let req = Zone.current.get('req');
Run Code Online (Sandbox Code Playgroud)
最后,您可以访问传递给reqin 的任何属性server.ts,例如:
req.headers['user-agent'];
Run Code Online (Sandbox Code Playgroud)
角度 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']
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1134 次 |
| 最近记录: |