渲染无视图响应对象的Jade视图

我有一个复杂的asynchronouscallback链,并在链中的任何点,如果有错误,我想呈现一个错误消息的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来清理你的一系列asynchronous调用。 那么多嵌套几乎是不可读的。 它看起来像serieswaterfall将满足您的需求在这里。 这也会大大减less您需要编写partnerErr并将所有的错误检查逻辑移到一个地方。

这就是说,为什么不传递respartnerErr并使用res.render ? 我正确理解你的问题吗?

UPDATE

我强烈build议你考虑重写一下,正如我上面所说的,但是,如果你想让它独立,你可以这样做:

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

另一个select是将partnerErr函数移到与partnerErr相同的范围内,并且只需访问resvariables即可。 我不确定如何将partnerErr与这个片断完全分离。