Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在Angular Universal应用程序中从ExpressJS获取vaues_Node.js_Angular_Express_Angular2 Universal - Fatal编程技术网

Node.js 在Angular Universal应用程序中从ExpressJS获取vaues

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

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

服务器端我需要知道用户的语言,我可以通过
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请求]: