ExpressJS无法返回JSON对象,页面显示Cannot GET /问题求助
问题原因及解决方案
核心问题
你写的错误处理中间件没被触发,原因是Express的错误处理中间件(带4个参数的那个)只有在调用next(err)时才会被激活,而你当前代码里调用的是无参数的next(),这会让Express继续寻找匹配当前路由的后续中间件/路由,而非进入错误处理流程。
因为你的GET /路由里,当error为true时调用next()后,没有其他能处理GET /的路由,所以Express触发了默认的404响应,返回了那个Cannot GET /的HTML页面。
修正方法
修改第一个路由里的next()调用,传递一个错误对象:
app.get("/", (req, res, next) => { console.log("middleware"); const error = true; if (error) { // 传递错误对象给next,触发错误处理中间件 next(new Error("error description")); } }); app.use((err, req, res, next) => { // 可以用err.message获取错误描述,也可以直接返回固定内容 res.status(400).json({ error: err.message }); });
这样当error为true时,Express会直接进入错误处理中间件,返回你预期的JSON响应,而非默认的404 HTML。
额外说明:错误处理中间件建议放在所有路由定义之后,这样能捕获整个应用中抛出的错误,这是Express错误处理的标准写法。
内容的提问来源于stack exchange,提问作者xKralTr
相关产品推荐
相关产品推荐

