繁体   English   中英

用JavaScript(ES6)承诺

[英]promises in javascript ( ES6 )

如何将状态代码为ok的Promise reject()错误从500更改为200?

在某些情况下,当我尝试拒绝时,总是会在前端收到500错误。

export default function login(req, res) {
return new Promise((resolve, reject) => {
passport.authenticate( 'local', function authenticate(err, user, info){
  if(err)  reject(err);
  if(!user) reject(info);

  req.logIn(user, err, info => {
    if(err) { reject(err) }
    else {
      resolve(user);
    }
  })
})(req, res);
});
}

错误: Status Code:500 Internal Server Error

500是一个HTTP错误,不是由您的诺言产生的,而是从服务器返回的错误。

如果要避免500错误,最好的解决方案是弄清楚为什么在后端收到该错误并在此修复,因为500通常表示抛出了未捕获的异常。

但是,如果您要假装一切正常,则可以忽略代码中的500错误,并返回不是生成的错误的内容:

if (err)
  reject(true);

然后,在Promise的catch块中,您可以:

login(...)
  .catch(function(e) {
    if (e === true)
      // pretend everything is okay
    else
      ...
  })

如果您拒绝,则状态代码不应为200 OK,但是如果您要这样做,则需要在发送回响应之前进行操作,

这里,

res.status(200).send('Something broke!');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM