快递承诺抛出错误

时间:2015-11-24 06:56:36

标签: javascript node.js asynchronous express promise

我正在使用Express与denodeify模块。当我尝试异步呈现电子邮件模板时,我收到错误。

<script type="text/javascript">
function japa(r) {
$("#Tamfan").html("");
    $.ajax({
        url     : 'file.php?id=' + r,
        type    : 'GET',
        dataType: 'html',
        success : function(pesan){
                $("#Tamfan").html(pesan);
        },
    });
}
</script>

我尝试使用res.render而没有回调,它工作正常,但我需要在变量中输出电子邮件模板。 我也无法理解我如何调试这部分代码。感谢帮助! 整个代码

.then(function () {
     return denodeify(res.render)(path.resolve('verify-email'), {
         name: user.displayName,
         appName: config.app.title,
         mail: user.email,
         url: 'http://' + req.headers.host
     });
})
.then(function (emailHTML) {
     // code which is not executed
})
.catch(function (err) {
     // [TypeError: Cannot read property 'req' of undefined]
});

1 个答案:

答案 0 :(得分:0)

我找到了解决方案,我们必须像这样绑定“this”变量

 return denodeify(res.render.bind(res))(path.resolve('modules/users/server/templates/verify-email'), {
      name: user.displayName,
      appName: config.app.title,
      mail: user.email,
      url: 'http://' + req.headers.host + '/api/auth/verify/' + user.verificationToken + "/" + user.email
 });

错误的原因是明确的“res.render”函数中的以下代码

  var app = this.req.app;
  var done = callback;
  var opts = options || {};
  var req = this.req;
  var self = this;

正确的方法是使用:

denodeify(res.render.bind(res))(path, options)

而不是

denodeify(res.render)(path, options)

感谢大家的回复!