javascript - 在没有响应对象的情况下渲染 Jade View

标签 javascript node.js express pug

我有一个复杂的异步回调链,在链中的任何点上,如果出现错误,我想渲染带有错误消息的 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清理一系列异步调用。如此多的嵌套几乎无法读取。看起来 serieswaterfall 可以满足您的需求。这也将大大减少您需要编写 partnerErr 的次数,并将所有错误检查逻辑移至一处。

话虽这么说,为什么不直接将 res 传递到 partnerErr 并使用 res.render 呢?我正确理解你的问题吗?

更新

我强烈鼓励您考虑按照我上面所说的那样重写它,但是,如果您想不理会它,您可以这样做:

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 真正基于此代码片段的解耦程度如何。

关于javascript - 在没有响应对象的情况下渲染 Jade View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23034965/

相关文章:

javascript - Google +1,每次点击都会中断。使用谷歌的代码。为什么会破

javascript - 根据名称选择jquery中的输入字段

javascript - 继续报错说某物不是函数但找不到原因

node.js - Mongoose 中的过滤、排序和分页返回重复值

JavaScript:console.log() 给出的结果与 alert() 不同

node.js - OpenShift : ImportError: No module named gyp: on NodeJs/Mongo cartridge

node.js - 模块构建失败: Error: Plugin 0 specified in "base" provided an invalid property of "definitions"

javascript - 在 Node.js 中从客户端向服务器发送数据

javascript - 子域名无法使用 express-vhost

javascript - Feathers Js 在服务器端限制对页面的访问