271

最初のミドルウェアから別のミドルウェアに変数を渡したいと思い、やってみましたが、「req.somevariableis a given as 'undefined'」がありました。


//app.js
..
app.get('/someurl/', middleware1, middleware2)
...

////middleware1
...
some conditions
...
res.somevariable = variable1;
next();
...

////middleware2
...
some conditions
...
variable = req.somevariable;
...
4

7 に答える 7

598

これがres.localsオブジェクトの目的です。リクエスト オブジェクトに変数を直接設定することはサポートされておらず、文書化されていません。res.localsは、リクエストの存続期間中、状態を保持することが保証されています。

res.locals

リクエストをスコープとするレスポンス ローカル変数を含むオブジェクト。したがって、そのリクエスト / レスポンス サイクル中にレンダリングされたビュー (存在する場合) でのみ使用できます。それ以外の場合、このプロパティは app.locals と同じです。

このプロパティは、リクエスト パス名、認証済みユーザー、ユーザー設定などのリクエスト レベルの情報を公開するのに役立ちます。

app.use(function(req, res, next) {
    res.locals.user = req.user;  
    res.locals.authenticated = !req.user.anonymous;
    next();
});

次のミドルウェアで変数を取得するには:

app.use(function(req, res, next) {
    if (res.locals.authenticated) {
        console.log(res.locals.user.id);
    }
    next();
});
于 2016-07-13T15:13:35.407 に答える
259

reqではなく、変数をオブジェクトにアタッチしますres

それ以外の

res.somevariable = variable1;

もつ:

req.somevariable = variable1;

他の人が指摘したres.localsように、ミドルウェアを介してデータを渡す推奨される方法です。

于 2013-09-18T14:43:51.507 に答える
40

のような変数を渡すことがベストプラクティスになるとは思いませんreq.YOUR_VARreq.YOUR_APP_NAME.YOUR_VARまたはを検討することをお勧めしますreq.mw_params.YOUR_VAR

他の属性の上書きを避けるのに役立ちます。

2020年5月31日更新

res.localsはあなたが探しているものです。オブジェクトはリクエストにスコープされています。

リクエストをスコープとするレスポンス ローカル変数を含むオブジェクト。したがって、そのリクエスト / レスポンス サイクル中にレンダリングされたビュー (存在する場合) でのみ使用できます。それ以外の場合、このプロパティは app.locals と同じです。

このプロパティは、リクエスト パス名、認証済みユーザー、ユーザー設定などのリクエスト レベルの情報を公開するのに役立ちます。

于 2015-02-19T19:37:59.450 に答える
7

これは、reqresが 2 つの異なるオブジェクトであるためです。

追加先と同じオブジェクトでプロパティを探す必要があります。

于 2013-09-18T14:43:41.880 に答える