7

Expressスタックにミドルウェアを注入する方法はありますか?つまり、app.jsにメインのミドルウェアチェーンをセットアップさせてから、アプリインスタンスを渡す他のモジュールを呼び出し、さらにミドルウェアを挿入したい場合があります(たとえば、正しい場所にパスポートを追加したい認証モジュール)。 )。

4

3 に答える 3

14

あなたは確かにあなたのappオブジェクトを他のモジュールに渡してuseそこで呼び出すことができます。もちろん、ミドルウェア関数は追加された順序でuse実行されるため、正しい順序で呼び出すように細心の注意を払う必要があります。

app.js

var app = express();
// ...

app.use(express.logger()); // first middleware function

var someOtherModule = require('./mod.js');
someOtherModule.init(app);

app.use(express.static()); // last middleware function)

mod.js

exports.init = function(app) {
    app.use(function(req, res, next) {

    });
};

スタックの真ん中にミドルウェア関数を実際に挿入する限り(ミドルウェア関数のセットですでに呼び出した後app.useそれを行うための文書化された方法はありません。 useスタックの最後に関数を追加するだけです。

use実際には、proto.jsのConnectによって提供されます:

app.use = function(route, fn){

  ...

  this.stack.push({ route: route, handle: fn });

  return this;
};

技術的app.stackには、あなたは自分自身をいじることができますが、私はこれをしません。文書化されていない実装の詳細をいじくりまわしていることになりますが、これは変更される可能性があります。つまり、ConnectまたはExpressのいずれかを将来更新すると、アプリが破損する可能性があります。

于 2012-12-03T20:56:39.110 に答える
0

app.use(fn)を使用するか、次のようにスタックできます。

app.get('/foo', fn1, fn2, fn3);

署名は常に同じで、next()を呼び出す必要があります。

function(req, res, next) {
  next();
}
于 2012-12-03T21:22:18.780 に答える
-2

何が問題なのかわかりませんか?

ミドルウェアに任意の関数を追加できます。

app.use(function(req,res,next){
   //some munipulation with req and res
   next()
})

そして、あなたはこれappをあなたのモジュラスに送ることができます

于 2012-12-03T20:36:45.580 に答える