如何设置 error.name in extended class Error in Node.js?

发布于 2022-09-12 03:38:13 字数 1475 浏览 27 评论 0

err.name 在 centralErrorHandler console logs 显示 undefined.

该怎么设置才能在 centralErrorHandler 获得 error name err.name = 'ExpressValidatorError';

如果把 return next(err); in auth.controller.js 改成 throw err;, err.name 就能成功获得 'ExpressValidatorError' 但不确定 throw err; 这样做对不对。

centralErrorHandler.js

module.exports = (err, req, res, next) => {           
        console.log(err.name);
        if(err.name === 'ExpressValidatorError') err = handleExpressValidatorError(err);            
}

auth.controller.js

const {validationResult} = require('express-validator');

exports.signup = (req, res) => {     
    const errors = validationResult(req); 
   
      if (!errors.isEmpty()) {
        let err = new AppError(`Invalid login credentials.`, 422);
        err.name = 'ExpressValidatorError';            
             
        return next(err);
      }

    res.status(200).send(req.user);          
}

appError.js

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;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

泪痕残 2022-09-19 03:38:13

exports.signup = (req, res) 里加 next 解决了 undefined的问题。

exports.signup = (req, res, next) => {
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文