Node.js 在Angular Universal应用程序中从ExpressJS获取vaues
我正在构建一个Angular2通用应用程序,并且正在集成 服务器端我需要知道用户的语言,我可以通过Node.js 在Angular Universal应用程序中从ExpressJS获取vaues,node.js,angular,express,angular2-universal,Node.js,Angular,Express,Angular2 Universal,我正在构建一个Angular2通用应用程序,并且正在集成 服务器端我需要知道用户的语言,我可以通过request.acceptsLanguages()()从中获得 我在server.ts中正确地获得了这些值,如下所示: function ngApp(req: any, res: any) { let supportedLangs = req.acceptsLanguages(); console.log('supportedLangs', supportedLangs); res.r
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
});
}
然后我不知道如何在我的app.node.module.ts
中传递或访问它们,我在那里为服务器设置了ng2 translate
有没有办法从Angular Universal应用程序(服务器端)访问这些值?如何使用?对于那些感兴趣的人来说,解决方案是使用区域
,在这样做时,有一些事情需要注意
首先,为了确保TypeScript解析器不会中断,您还需要在使用区域的文件顶部声明:
declare var Zone: any;
或者我想你可以安装所有的打字机,但我还没有测试过
然后,在仅节点模块中的任何位置,您都可以通过以下操作获得传递到server.ts
文件中res.render
的参数:
let req = Zone.current.get('req');
最后,您可以访问server.ts
中传递给req
的任何属性,例如:
req.headers['user-agent'];
角度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']
}
@谢谢你指出这一点。我已经用Angular 5的代码更新了答案:-)我对SSR Angular 5的区域有问题。它只在浏览器模式下对我有效。我描述了我的问题的复杂解决方案:我用这个解决方案得到了这个错误:错误错误:StaticInjectorError(o)[InjectionToken请求]: