【问题标题】:Node.js Express - Conditional Rendering of TemplateNode.js Express - 模板的条件渲染
【发布时间】:2016-12-28 20:13:57
【问题描述】:

我正在使用 Express 和 Passwordless 模块来设置无密码身份验证。一切正常,gte,但我被一个问题困住了。

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

{ 警告:[ {消息:'消息发送失败',数字:'91545454'}],错误:[ {代码:51,消息:'未指定有效数字'}], 状态:'失败'}

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

我的代码如下所示:

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

【问题讨论】:

  • 请使用requestToken发布代码。
  • 我也添加了requestToken代码。

标签: node.js express password-less


【解决方案1】:

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

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

【讨论】:

  • 我这样做了,它也有效。但是,这会产生错误,并且会显示错误处理程序页面。相反,我想呈现一个完全不同的页面。我该怎么做?
  • 你做不到。您可以只检查路线中的错误消息,并针对特定错误呈现所需的模板。
  • 我的应用程序中有这个错误处理程序代码... app.use(function(err, req, res, next) { res.status(err.status || 500); res.render( '错误',{消息:err.message,错误:err }); });是否可以自定义此以针对不同的错误显示不同的模板?
【解决方案2】:

只需调用 res.render 来检查失败的短信状态:

passwordless.addDelivery( 函数(tokenToSend,uidToSend,收件人,回调){

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

});

【讨论】:

  • res.render('smsFailpage') 给出错误 res.render is not a function。我什至尝试了 response.render 但得到了同样的错误。不知道如何处理。非常感谢任何帮助。
猜你喜欢
  • 2015-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多