2012-05-28 31 views
1

好傢伙這裏使用異步LIB是我的代碼:使用async.series並結合findOne()與send_result中的NodeJS

function get_group(req, res, next) { 
var send_result = function(err, group_list) { 
[...] 
    res.send(group_list); 
    return next(); 
}; 

Group.findOne({'_id': req.params._id}, send_result); 

}

現在我怎麼能實現異步庫(caolan) ,它的代碼看起來非常混亂。

EDIT1

我用這個策略,但我不知道是正確的,什麼建議嗎?

function get_group(req, res, next) { 
async.waterfall([ 
    function(callback) { 
     Group.findOne({'_id': req.params._id}, callback); 
    } 
], 
function (err, group_list){ 
    res.send(group_list); 
    return next(); 
}); 

}

什麼建議嗎?

+0

應該是與async.waterfall有關的東西,但我仍然沒有成功與 – nick

+0

我想有外部函數send_result,以便我可以在其他地方重新使用 – nick

+0

我只注意到你沒有標記這個問題與快遞標籤。如果你沒有使用快遞,請說出來,因爲我的回答是基於這個假設。 – Pickels

回答

2

對於他們在Express.js中所稱的路由,實際上幾乎不需要使用異步庫。原因在於路線實際上是一種控制讓他們自我流動。他們需要儘可能多的中間件,因此您可以將路由劃分爲小塊代碼。

例如,假設您想從數據庫中獲取一個記錄/文檔,然後將其作爲json發送。如果你寫的中間件爲您的路線是這樣,你會用小積木,你可以很容易地在整個應用程序中重用最終

var getOne = function(req, res, next){ 
    db.one('some id', function(err, data){ 
     if (err){ 
      return next({ type: 'database', error: err }); 
     }; 

     res.local('product', data); 
     next(); 
    }); 
}; 

var transformProduct = function(req, res, next){ 
    var product = res.locals().product; 

    transform(product, function(data){ 
     res.local('product', data); 
     next(); 
    }); 
}; 

var sendProduct = function(req, res, next){ 
    var product = res.locals().product; 
    res.json(product); 
}; 

app.get('/product', getOne, transformProduct, sendProduct); 

:然後你就可以執行以下操作。

+0

來處理我的問題(基於express)本地人()不起作用,你有任何解決方案嗎? – nick

+0

如果您的問題與原始問題沒有直接關係,您應該創建一個新問題。 – Pickels