2016-12-30 10 views
2

私はAngular2 Universalアプリケーションを構築しており、ng2-translateを統合しています。ExpressJSの角度をユニバーサルアプリケーションで取得

サーバー側私は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 
    }); 
} 

その後、私はそれらを渡す方法を知っている、または私は、サーバー用のng2-translateを設定し、私のapp.node.module.tsで、それらにアクセスしないでください。

Angular Universalアプリ(サーバー側)からこれらの値にアクセスする方法はありますか?どうやって?

答えて

2

興味のある方は、Zoneを使用して解決することをお勧めします。

まず、活字体のパーサは壊れていないことを確認するために、あなたも、あなたがZoneを使用したファイルの先頭に、宣言する必要があります:

declare var Zone: any; 

または私はあなたがすべてをインストールすることができると思いますタイピング、しかし私はそれをテストしていない。

はその後、どこかのノードでのみ、あなたがこれを行うことにより、server.tsファイルにres.renderに渡されたパラメータを取得することができますモジュール:最後に

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

、あなたがserver.tsreqに渡された任意のプロパティにアクセスすることができ、例えば:アンギュラ5

FOR

req.headers['user-agent']; 

UPDATE

コメントに指摘されているように、前のコードはもう機能しません。良いニュースは、角度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'] 
} 
+0

これはそれを指摘するための新しい角度5つの –

+0

@kris_IVのおかげでは動作しません。私はAngular 5で動作するはずのコードで答えを更新しました:-) – ghego1

+0

SSR Angular 5のZoneに問題があります。これはブラウザモードでのみ動作します。私は私の問題の雇用のための複雑な解決策を記述する:https://stackoverflow.com/a/48509431/2972087 –

関連する問題