4

私は現在 formBuilder (クライアント javascript <=> JSON <=> ノード) に取り組んでいるので、サーバーで JSON データを処理する効果的な方法が必要です。すべてのフォームは 1 つのルートにバインドされ、ミドルウェアによってキャッチされるため、次のようなものが必要です。

コードは簡素化されています (正規表現、req バリデーターなどはありません ..)

var middleware = require('../middleware'); // simple dir to object export

exports = module.exports =function(req,res,next) {
  if(req.xhr && req.is('application/json')) {
    var i, items = req.body.events.length;
    for(i = 0; i < items; i++) {
      var event = req.body.events[i];
      if(middleware.forms[event] {
        // -----------------
        and here add that middleware into current flow ..
        // -----------------
      }
    }
  } else {
    return next();
}

最も簡単な方法は、使用されるミドルウェアのリストを準備し、それらを最終ルート witch async で呼び出すことです..しかし、私はこれを良い方法とは考えていません..

それで、要求されたミドルウェアを現在のフローに追加する方法はありますが、フィランルートの前ですか?

4

2 に答える 2

10

ミドルウェアは単なる関数です。したがって、それらを呼び出すだけで問題はありません。私は先週同じ問題を抱えていたので、小さなヘルパーを書きました。

 var walkSubstack = function (stack, req, res, next) {

  if (typeof stack === 'function') {
    stack = [stack];
  }

  var walkStack = function (i, err) {

    if (err) {
      return next(err);
    }

    if (i >= stack.length) {
      return next();
    }

    stack[i](req, res, walkStack.bind(null, i + 1));

  };

  walkStack(0);

};

配列または 1 つの関数だけで使用できます。

walkSubstack(middleware, req, res, next);
//or
walkSubstack([middleware, middleware], req, res, next);
于 2012-07-29T22:25:10.773 に答える