使用Express.js提交数据时始终触发BadRequestError求助
排查Express提交数据触发BadRequestError的问题
我在使用Node.js的Express.js框架提交数据时,已编写规范的错误处理函数,但每次提交都会触发BadRequestError,错误提示为:throw new CustomError.BadRequestError('All fields are required, please verify your data!')。
相关代码
创建任务控制器函数
const createTaskController = async (req, res) => { const {name, completed} = req.body; console.log(req.body); if ( !name || !completed) { throw new CustomError.BadRequestError('All fields are required, please verify your data!') } const task = await createTaskService({...req.body}); res.status(StatusCodes.CREATED).send({msg: 'Task created successfully!'}) };
BadRequestError类代码
class BadRequestError extends CustomAPIError { constructor(message) { super(message) this.StatusCodes = StatusCodes.BAD_REQUEST } }
CustomError导出代码
const CustomAPIError = require('./custom-api') const UnauthenticatedError = require('./unathenticated') const NotFoundError = require('./not-found') const BadRequestError = require('./bad-request') module.exports = { CustomAPIError, UnauthenticatedError, NotFoundError, BadRequestError }
排查解决方案
检查请求体解析中间件:Express默认不会自动解析JSON或表单请求体,必须在路由注册前添加解析中间件,否则
req.body会是undefined,导致字段判断条件始终为真。在项目入口文件(如app.js)中添加:const express = require('express'); const app = express(); // 解析JSON格式请求体 app.use(express.json()); // 解析URL编码格式请求体 app.use(express.urlencoded({ extended: true }));核对请求字段名:确认前端提交的字段名与后端解构的
name、completed完全一致(大小写敏感),比如前端传Name或Completed会导致解构失败,字段值为undefined。调整
completed字段的判断逻辑:如果completed是布尔类型,当前代码会把false值判定为“缺失”(因为!false为true)。若允许completed为false,只要求字段存在,可修改判断条件:if (!name || typeof completed === 'undefined') { throw new CustomError.BadRequestError('All fields are required, please verify your data!') }查看控制台
req.body输出:通过你添加的console.log(req.body),确认输出内容是否包含name和completed字段。如果输出为{}或undefined,说明请求体未被正确解析,优先检查中间件配置。
内容的提问来源于stack exchange,提问作者Fedy Belaid
相关产品推荐
相关产品推荐

