在生产环境中,客户端没有得到他们需要的响应

编程入门 行业动态 更新时间:2024-09-28 03:23:57

在生产环境中,<a href=https://www.elefans.com/category/jswz/34/1771388.html style=客户端没有得到他们需要的响应"/>

在生产环境中,客户端没有得到他们需要的响应

我编写了这个 AppError 类,它足以让我的全局错误处理中间件发送有关操作和编程错误的响应。

class AppError extends Error {
     constructor(message, statusCode){
          super(message);

          this.statusCode = statusCode;
          this.status = `${statusCode}`.startsWith(4) ? 'fail' : 'error';
          this.isOperational = true;

          Error.captureStackTrace(this, this.constructor)
     }
}

module.exports = AppError;

这是我的全局错误处理中间件,具有使其工作所需的所有必要功能。

const AppError = require('./AppError');


//global error handling middleware all errors go into it
module.exports = (err, req, res, next)=>{
     err.statusCode = err.statusCode || 500;
     err.status = err.status || 'error';

     if(process.env.NODE_ENV === 'development'){
          sendErrorDev(err, res)
     }

     else if(process.env.NODE_ENV === 'production'){
          let error = {...err};
          if(error.name === 'CastError') error = handleCastErrorDB(error);
          sendErrorProd(err, res)
     }
};


const sendErrorDev = (err, res) => {
     res.status(err.statusCode).json({
          status: err.status,
          error: err,
          message: err.message,
          stack: err.stack
     });
}

const sendErrorProd = (err, res) => {
     // Operational, trusted error: send message to client
     if (err.isOperational){
          res.status(err.statusCode).json({
               status: err.status,
               message: err.message
          });
     }else{
          // Programming or other unknown error: don't send details to client
          //1_console err
          console.log('error: ', err);
          //2_send generic message to client
          res.status(500).json({
               status: 'error',
               message: 'Something went very wrong!'
          });
     };
};

const handleCastErrorDB = err => {
     const message = `Invalid ${err.path}: ${err.value}`;
     return new AppError(message, 400)
};

我的问题是,在生产环境中,当我尝试通过 GET 请求获取数据时,客户端没有收到他们应该收到的错误,我正在与邮递员进行测试。详细说明一下,为了测试客户端得到什么,我正在尝试获取具有无效 ID 的数据...

127.0.0.1:3000/api/v1/tours/wwwwwwwwwwwwwwwwwww

这是客户端错误,因此,他们应该获得

handleCastErrorDB
中设置的带有 400 状态代码的响应,但相反,我看到带有消息的 500 状态代码

"status": "error",
    "message": "Something went very wrong!"

如果错误无法运行,这是客户端将得到的响应。请参阅

sendErrorProd()
函数。

在开发模式下,我得到了我想要的东西,但藏在这里。

我正处于 Node.js 的学习模式,并且我已经尝试了我所知道的一切。

回答如下:

首先,在下面的代码中。在最新版本的猫鼬中,我认为error.name不直接存在。

//global error handling middleware all errors go into it
module.exports = (err, req, res, next)=>{
     err.statusCode = err.statusCode || 500;
     err.status = err.status || 'error';

     if(process.env.NODE_ENV === 'development'){
          sendErrorDev(err, res)
     }

     else if(process.env.NODE_ENV === 'production'){
          let error = {...err};
          if(error.name === 'CastError') error = handleCastErrorDB(error);
          sendErrorProd(err, res)
     }
};

更多推荐

在生产环境中,客户端没有得到他们需要的响应

本文发布于:2024-05-31 07:09:29,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1771403.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:客户端   环境

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!