You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 11:35:23