0

したがって、次のような複数のルートがあります。

app.get('/user', function(req, res) {
    model.find({}, function(err, docs) {
      res.send(docs);
    });
  });

app.get('/user/:id', function(req, res) {
    model.findById(req.params.id, function(err, doc) {
      res.send(doc);
    });
  });

たくさん掛けます。

それらがそのようなコールバック関数を除外する方法になるかどうか知りたいです:

app.get('/user', function(req, res) {
    model.find({}, sendInResponse);
  });

app.get('/user/:id', function(req, res) {
    model.findById(req.params.id, sendInResponse);
  });

私の問題はresスコープです。

4

1 に答える 1

0

次のようにリファクタリングします。

var find = function (queryFn) {                                          

  return function (req, res, next) {                                     

    var query  = queryFn.apply({ req: req, res: res });                  

    model.find(query, function (err, docs) {                             
      res.send(docs);                                                    
    });                                                                  

  }                                                                      

};   

これで、次のように使用できる汎用クエリ ミドルウェアができました。

app.get('/user/:id', find(function () { return { id: this.req.params.id } });

これは可能なことのヒントにすぎず、さらにリファクタリングすることもできます。これは、汎用ミドルウェアのみを使用して作成したアプリからのルートです。

app.get('/users/:username',
        data.one('user', data_users.byUsername, 'params.username'),
        data.many(data_grows.byUserId, 'locals.user.id'),
        general.render('grows/index'));
于 2013-02-22T19:04:54.907 に答える