2013-02-22 61 views
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範圍。

回答

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