javascript中的承诺(ES6)

javascript中的承诺(ES6),javascript,ecmascript-6,passport.js,es6-promise,Javascript,Ecmascript 6,Passport.js,Es6 Promise,如何将承诺拒绝()错误从500更改为200,状态代码为ok 在某些情况下,当我试图拒绝时,前端总是会出现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(!us

如何将承诺
拒绝()
错误从500更改为200,状态代码为ok

在某些情况下,当我试图拒绝时,前端总是会出现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);
});
}

错误:
状态代码:500内部服务器错误

如果您拒绝,则状态代码不应为200 OK,但如果您想这样做, 你需要在回复之前完成

这里,


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

如果您希望避免500错误,最好的解决方案是找出在后端出现该错误的原因,并在后端进行修复,因为500通常意味着抛出了未捕获的异常

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

if (err)
  reject(true);
然后在承诺的
catch
块中,您可以:

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

您应该解决服务器代码中的500错误
login(...)
  .catch(function(e) {
    if (e === true)
      // pretend everything is okay
    else
      ...
  })