Next.js + Mongoose创建MongoDB空文档问题求助
解决Next.js + Mongoose插入空文档问题
问题诊断
你遇到的仅生成_id和__v空文档的问题,核心原因是API路由未正确解析JSON请求体,导致req.body为空对象,Mongoose基于空对象创建文档,自然只包含默认字段。
解决方案
Next.js的API路由默认不会自动解析JSON请求体,需要手动添加解析逻辑,或使用内置工具处理:
在API路由中添加请求体解析
在你的接口文件(如pages/api/raceresults.js)顶部,加入解析逻辑:import { parseBody } from 'next/dist/server/api-utils/node' export default async function handler(req, res) { // 针对POST请求解析JSON体 if (req.method === 'POST') { req.body = await parseBody(req, '1mb') } switch (req.method) { case 'POST': try { const newResultDoc = await Raceresult.create(req.body); res.status(201).json({ success: true, data: newResultDoc }) } catch (error) { res.status(400).json({ success: false, error: error.message }) } break default: res.status(400).json({ success: false }) break } }检查请求头配置
确保ThunderClient发送请求时,请求头包含Content-Type: application/json,缺少该头会导致解析逻辑失效,req.body依然为空。验证请求体是否正确接收
在POST逻辑中添加日志,确认数据是否被正确获取:case 'POST': console.log('Received request body:', req.body) // 查看控制台输出 try { // 创建文档逻辑 }
额外排查点
如果以上方法无效,检查以下内容:
- 确认模型字段名
name与请求体中的字段名完全一致(大小写敏感) - 给Schema字段添加必填校验,空请求体时会抛出错误,便于排查:
const raceresultSchema = new mongoose.Schema({ name: { type: String, required: true }, });
内容的提问来源于stack exchange,提问作者axeldc
相关产品推荐
相关产品推荐

