我到底做错了什么.我正在try 创建一个全局错误处理中间件,它以特定的JSON格式显示error messageerror status,但它却以某种奇怪的方式显示错误.

  • 目录:node/app.js
const express = require('express');
const app = express();

//gloabl error handling middlware
const globalError = require('./middleware/globalErrorHandlingMiddleware')

//middlewares
app.use(express.json())
app.use(globalError)


//homepage
app.get('/',(req,res)=>{
    res.send("homepage")
})

//page not found
app.all('*',(req,res,next)=>{
    const err = new Error('route does not exist')
    err.statusCode = 404;

    next(err)
})

//port
app.listen(3000,()=>{
    console.log('server started at port 3000')
})
  • 目录:node/midleware/lobalErrorHandlingMiddleware.js
function globalErrorHandler(err, req, res, next){
    
    const errorMessage = err.message || 'Something went wrong.';
    const statusCode = err.statusCode || 500;

    res.status(statusCode).json({
        error: errorMessage,
    });
};

module.exports = globalErrorHandler

output i am getting

output expected

推荐答案

您只需更改全局错误捕获器的位置,因为在您的示例中,它必须位于路径的末尾

const express = require('express');
const app = express();

//gloabl error handling middlware
const globalError = require('./middleware/globalErrorHandlingMiddleware')

//middlewares
app.use(express.json())


//homepage
app.get('/',(req,res)=>{
    res.send("homepage")
})

//page not found
app.all('*',(req,res,next)=>{
    const err = new Error('route does not exist')
    err.statusCode = 404;

    next(err)
})


app.use(globalError) // moving to the end of your route calling

//port
app.listen(3000,()=>{
    console.log('server started at port 3000')
})

你会发现

@HOST = http://localhost:3000

GET {{HOST}}/2
Content-Type: application/json

将输出

HTTP/1.1 404 Not Found
X-Powered-By: Express
Content-Type: application/json; charset=utf-8
Content-Length: 32
ETag: W/"20-fEiG2Eve04KkBKDozkc9tU0brWo"
Date: Wed, 26 Jul 2023 10:53:14 GMT
Connection: close

{
  "error": "route does not exist"
}

Javascript相关问答推荐

为什么我会获取MUI Date TimePicker TypHelp:Value.isValid不是AdapterDayjs.isValid中的函数

使用JavaScript更改json值顺序

我可以后增量超过1(最好是内联)吗?

调用SEARCH函数后,程序不会结束

Angular:ng-contract未显示

是否有方法在OpenWeatherMap API中获取过go 的降水数据?

如何从JSON数组添加Google Maps标记—或者如何为数组添加参数到标记构造器

在拖放时阻止文件打开

如何在Vue 3中创建自定义 Select 组件,并将选项作为HTML而不是props 传递?

如何将react—flanet map添加到remixjs应用程序

如何在每次单击按钮时重新加载HighChart/设置HighChart动画?

提交链接到AJAX数据结果的表单

WP Bootstrap NavWaker:下拉菜单一次打开所有下拉菜单

第二次更新文本输入字段后,Reaction崩溃

如何使用JS创建一个明暗功能按钮?

自定义确认组件未在vue.js的v菜单内打开

Phaser3 preFX addGlow不支持zoom

不同表的条件API端点Reaction-redux

P5JS-绘制不重叠的圆

JavaScript将字符串数字转换为整数