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 回答