Strapi控制器抛出NotFoundError却返回500而非404,如何修复?
修复Strapi抛出NotFoundError却返回500状态码的问题
我有一个Strapi控制器方法会抛出NotFoundError:
async matchTrack(ctx) { throw new NotFoundError('YO NOT FOUND'); }
当我调用该接口时,错误已抛出,但响应状态码为500而非404。
[2023-06-08 16:05:39.333] error: YO NOT FOUND NotFoundError: YO NOT FOUND
at Object.matchTrack
以下是修复方案:
确认NotFoundError的正确导入
必须导入Strapi官方提供的错误类,否则内置错误处理中间件无法识别该错误类型,默认返回500状态码。Strapi v4的正确导入方式:// CommonJS 语法 const { NotFoundError } = require('@strapi/utils/lib/errors'); // ES模块语法 import { NotFoundError } from '@strapi/utils/lib/errors';使用上下文内置的notFound方法(更简便)
直接调用ctx对象的notFound方法,它会自动设置404状态码并生成标准错误响应,无需手动实例化错误类:async matchTrack(ctx) { ctx.notFound('YO NOT FOUND'); }检查自定义错误处理中间件
如果项目中存在自定义错误处理中间件,需确认它没有覆盖Strapi默认逻辑,保证NotFoundError类型的错误被正确映射到404状态码。
内容的提问来源于stack exchange,提问作者gordie
相关产品推荐
相关产品推荐

