构建名言存储REST API时POST请求验证失败问题排查
问题分析与解决
核心问题1:POST请求验证失败
提示cite字段必填但请求明明携带了该字段,原因有两点:
- 请求头的
Content-Type写错了,你写的是application.json,正确的MIME类型应为application/json(没有多余的点) - 若Express未配置JSON解析中间件,无法识别JSON格式的请求体,会导致
req.body为空,自然取不到cite字段的值
核心问题2:移除required后仅返回id
此时req.body依然为空,创建的Quote实例只有MongoDB自动生成的_id,没有cite和author字段,所以返回结果仅包含id。
解决方案
修正请求的Content-Type
把POST请求的Content-Type改为正确格式:POST http://localhost:3000/quotes Content-Type: application/json { "cite": "Accept the things to which fate binds you, and love the people with whom fate brings you together,but do so with all your heart.", "author": "Marcus Aurelius" }添加Express JSON解析中间件
在你的主应用文件(如app.js/server.js)中加入以下代码,确保Express能解析JSON请求体:const express = require('express'); const app = express(); // 关键:添加JSON解析中间件 app.use(express.json()); // 挂载路由 const quotesRouter = require('./routes/quotes'); app.use('/quotes', quotesRouter);保留Schema的
required配置
你的Schema中cite字段的required: true配置是正确的,无需移除,修复上述问题后验证即可正常通过。
完成以上操作后,重新发送POST请求,就能正常创建并返回包含cite、author和_id的完整Quote对象。
内容的提问来源于stack exchange,提问作者Daniel Ishida
相关产品推荐
相关产品推荐

