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

如何在swagger-node中设置或修改404错误的响应类型?

解决Swagger-Node自定义404 JSON响应的方法

我之前用swagger-node开发API的时候也碰到过这个问题,默认返回的HTML格式404确实和API的JSON响应风格不统一,下面给你两种实用的实现方式:

方法1:添加Express全局404中间件

swagger-node底层基于Express框架,你可以在加载完所有Swagger中间件之后,追加一个自定义的404处理中间件,直接覆盖默认的HTML响应。

具体操作步骤:

  • 找到项目的入口文件(通常是app.js或server.js)
  • 在swagger.initializeMiddleware(app)的回调函数末尾,添加如下代码:
swagger.initializeMiddleware(app, function(middleware) {
  // 先加载Swagger的核心中间件
  app.use(middleware.swaggerMetadata());
  app.use(middleware.swaggerValidator());
  // ... 其他你已配置的Swagger中间件

  // 最后添加自定义404处理逻辑
  app.use((req, res) => {
    res.status(404).json({
      code: 404,
      message: "请求的资源不存在",
      request_path: req.originalUrl,
      request_method: req.method
    });
  });
});

这种方式简单直接,所有未匹配到Swagger路由的请求都会被这个中间件捕获,返回你定义的JSON格式响应。

方法2:自定义Swagger错误处理器

如果你想更贴合Swagger-Node的生态,可以通过替换默认错误处理逻辑来实现。Swagger-Node依赖的swagger-tools包支持自定义错误处理,你可以针对性处理404场景:

const swaggerTools = require('swagger-tools');

swaggerTools.initializeMiddleware(swaggerDoc, function(middleware) {
  // 加载Swagger各类中间件...

  // 自定义错误处理中间件
  app.use((err, req, res, next) => {
    // 捕获404错误或未匹配路由的情况
    if ((err && err.status === 404) || !err) {
      return res.status(404).json({
        error_code: "NOT_FOUND",
        error_message: `无法找到资源:${req.method} ${req.originalUrl}`
      });
    }
    // 其他错误交给默认逻辑处理
    next(err);
  });
});

注意:这个中间件必须放在所有Swagger中间件之后,才能确保捕获到未匹配的请求。

验证效果

重启服务后,访问任意不存在的URL(比如/fhello),就能得到你想要的JSON格式响应了,示例返回:

{
  "code": 404,
  "message": "请求的资源不存在",
  "request_path": "/fhello",
  "request_method": "GET"
}

内容的提问来源于stack exchange,提问作者Talita

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:27:56