Node.js Express - 模板的条件渲染

时间:2016-08-22 10:11:08

标签: node.js express password-less

我正在使用Express和Passwordless模块​​来设置无密码身份验证。一切正常,但是我陷入了一个问题。

作为交付方法的一部分,我使用外部api将短信发送给用户。如果短信发送正确,一切正常。但是,如果短信无法发送,仍然没有错误,但来自api调用的响应告诉我短信失败。如果失败,api响应如下:

{警告:[{message:'邮件发送失败',号码:' 91545454' }],错误:[{code:51,message:'未指定有效数字' }],   状态:'失败' }

现在,在我的node / express应用程序中,如果api响应有status = failure,我想将它们发送到另一个页面,我会告诉用户这些短信失败。

我的代码如下所示:

passwordless.addDelivery(
    function(tokenToSend, uidToSend, recipient, callback) {

    var smscall = 'MY API CALL URL;
    needle.get(smscall, function(error, response) {
      if(error) {
          console.log(error);
      }
      if (!error && response.statusCode == 200) {
        console.log(response.body);
      }
      if(response.body.status == 'failure') {
        console.log('Failed');
        THIS IS WHERE I WOULD LIKE TO REDIRECT USER TO A DIFFERENT TEMPLATE OR RENDER A MESSAGE.
      }
      callback(error);
    });
});

requestToken代码如下所示:

router.post('/', passwordless.requestToken(function(user, delivery, callback) {
    callback(null, user);
    }, { failureRedirect: '/error' }),
    function (req, res) {
        res.render('verify', { uid: req.passwordless.uidToAuth });
    }
);

2 个答案:

答案 0 :(得分:0)

尝试在最后一个条件块中调用带有错误的回调。

if(response.body.status === 'failure') {
     console.log('Failed');
     return callback(new Error(response.body.status));
}

答案 1 :(得分:0)

只需调用res.render,检查sms状态是否失败:

passwordless.addDelivery(     function(tokenToSend,uidToSend,recipient,callback){

var smscall = 'MY API CALL URL;
needle.get(smscall, function(error, response) {
  if(error) {
      console.log(error);
  }
  if (!error && response.statusCode == 200) {
    console.log(response.body);
  }
  if(response.body.status == 'failure') {
    console.log('Failed');
    return res.render('smsFailPage');
  }
  callback(error);
});

});