簡體   English   中英

渲染沒有響應對象的Jade視圖

[英]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來清理您的一系列異步調用。 這么多嵌套幾乎是不可讀的。 看起來serieswaterfall將在這里滿足您的需求。 這也將大大減少您編寫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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM