首页 > 解决方案 > res.json 没有向客户端发送我的错误消息?

问题描述

我有这个错误处理程序,可以根据发生的情况检索特定的错误消息。但问题是,当我使用 .catch() 运行我的错误处理函数时,如果我登录到节点控制台,它会起作用,但是当我尝试通过 res.json() 将它发送到客户端时,它只会发送状态代码,而不是我的错误处理程序的任何部分。

function errorHandler(error){
  if (error.name === 'SequelizeValidationError') {
    const errors = error.errors.map(err => err.message);
    return errors;
  } else {
    throw error;
  }
}


router.post('/create', async(req, res) => {
     await Movie.create(req.body)
      .then(() => res.json("Movie Created"))
      .catch( err => res.status(401).json(errorHandler(err)) );
  });

这是我的错误处理程序代码和我正在谈论的路线。它在节点控制台中工作,但就像我说的那样,它只将状态 401 代码发送给客户端,没有别的。我怎样才能将我的错误消息也发送给客户端?

谢谢!

标签: javascriptnode.jsapiexpress

解决方案


因为它不等待errorHandler的结果。让他们等着。尝试这个。

function errorHandler(error, cb){
  if (error.name === 'SequelizeValidationError') {
    const errors = error.errors.map(err => err.message);
     cb(errors);
  } else {
    throw error;
  }
}


router.post('/create', async(req, res) => {
     await Movie.create(req.body)
      .then(() => res.json("Movie Created"))
      .catch( err => {
              errorHandler(err, function(errors){
                   res.status(401).json(errors);
               });
      });
  })

或者你可以返回一个 Promise 并在 errorHandler 上等待。


推荐阅读