Express:如何计算路由回调

时间:2013-02-22 17:20:31

标签: javascript express

所以我有这样的多条路线:

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范围。

1 个答案:

答案 0 :(得分: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'));