【问题标题】:Express: How to factor routes callbackExpress:如何考虑路由回调
【发布时间】:2013-02-23 03:04:54
【问题描述】:

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

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

【问题讨论】:

    标签: javascript express


    【解决方案1】:

    我会这样重构它:

    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'));
    

    【讨论】:

      猜你喜欢
      • 2017-01-25
      • 2021-07-15
      • 2020-08-12
      • 2013-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多