[英]Render Jade view without Response Object
我有一個復雜的異步回調鏈,並且在鏈中的任何時候,如果有錯誤,我都想用錯誤消息來呈現一個Jade模板。
在下面的功能partnerErr中,是否可以使用沒有原始響應對象的模板進行響應?
app.post('/dashboard/partners/create', function (req, res) {
console.log( req.body );
ParseUtils.doesUserExist(
req.body.partnerEmail,
function() { ShopifyUtils.doesPartnerExist( req.body.partnerShopSlug,
function() { ParseUtils.createUser( req.body,
function() { ShopifyUtils.createPartner( req.body,
res.send( ' all good. parse and shopify passed. user created. '),
partnerErr
); },
partnerErr
); },
partnerErr
);
},
partnerErr
);
});
function partnerErr(err) {
console.log( 'rendering partner error' );
app.render('admin/partnersCreate', { error : err }, function(err, html) {
console.log('html', html);
});
}
首先,我來看看https://github.com/caolan/async來清理您的一系列異步調用。 這么多嵌套幾乎是不可讀的。 看起來series
或waterfall
將在這里滿足您的需求。 這也將大大減少您編寫partnerErr
並將所有錯誤檢查邏輯移到一個位置所需的次數。
話雖如此,為什么不將res
傳遞給partnerErr
並使用res.render
呢? 我是否正確理解您的問題?
UPDATE
我強烈建議您考慮像上面所說的那樣重寫它,但是,如果您想不理會它,可以執行以下操作:
app.post('/dashboard/partners/create', function(req, res) {
console.log(req.body);
ParseUtils.doesUserExist(
req.body.partnerEmail,
function() {
ShopifyUtils.doesPartnerExist(req.body.partnerShopSlug,
function() {
ParseUtils.createUser(req.body,
function() {
ShopifyUtils.createPartner(req.body,
res.send(' all good. parse and shopify passed. user created. '),
partnerErr(res)
);
},
partnerErr(res)
);
},
partnerErr(res)
);
},
partnerErr(res)
);
});
function partnerErr(res) {
return function(err) {
console.log('rendering partner error');
res.render('admin/partnersCreate', {
error: err
});
}
}
另一種選擇是將移動partnerErr
功能到同一范圍內app.post
,只是有機會獲得res
變量。 我不確定partnerErr
是如何分離的,僅基於此片段。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.