エクスプレス使用の実装this
は毎回返されるため、常に連鎖可能です。連鎖性の問題は、の不要な使用に起因します。server.use(server.router)
これは、最初の非ミドルウェアルートが、などを介して追加されたときにエクスプレスによって自動的に実行されますserver.get
。server.post
これは、ここのエクスプレスソースコードで確認できますが、これは一般的なポイントです。混乱と問題の問題(ほとんどのserver.user(server.router)
場合、ルーターをデフォルトの場所に移動させるのではなく、ルーターを実行することで発生します。これは、ほとんどの場合、ルーターにとって正しい場所です。フォーラムは次のとおりです。
server.use
ミドルウェアをセットアップするための適切に順序付けられた呼び出し
server.get('/home')
およびその他のHTTPメソッド関数を使用した特定のルート
- エラー処理、404ミドルウェアなど
Expressは1の後、2の前にルーターを追加し、すべてがうまくいくでしょう。
行を省略した場合に主張するコメントではserver.router
、にアクセスできなくなりますreq.session
。申し訳ありませんが、そうではありません。これは、セッションミドルウェアがreq.session
未定義になる直前のミドルウェアと、セッションミドルウェアが存在する直後のミドルウェアを表示する、動作中のExpressアプリ全体です。
var express = require('express');
var server = express();
server.use(function (q,r,n) {console.log('Before cookie:', q.session);n();});
server.use(express.cookieParser());
server.use(function (q,r,n) {console.log('after cookie:', q.session);n();});
server.use(express.session({secret: 'SEKRET'}));
server.use(function (q,r,n) {console.log('after session:', q.session);n();});
server.get('/', function (q,r,n) {r.send("you got slashed");});
server.listen(3000);
それを実行すると、コンソールにこれが表示されます。
Before cookie: undefined
after cookie: undefined
after session: { cookie:
{ path: '/',
_expires: null,
originalMaxAge: null,
httpOnly: true } }
ただし、変数が定義されているのと同じステートメントで変数を関数パラメーターとして使用できない理由を尋ねる場合、server
それがJavaScriptの動作方法であり、expressとは関係ありません。あなたはこれを行うことはできません:
var foo = console.log(foo.bar);
foo
ステートメント全体が完了するまでは未定義だからです。
FWIW私の意見では、このような連鎖可能なコードは疑わしいと思います。デバッガーやブレークポイントには不向きであり、ファーストクラスの言語機能としてサポートされておらず、各行がインデントされていない場合と比較して、実際には文字を節約できませんapp.use(app.router)
。