使用Express+Node+Prisma操作MySQL时,create方法报'name参数缺失'错误
问题解决:Prisma.create()提示Argument
name is missing 问题根源
你的Express后端未配置JSON请求体解析中间件,导致前端发送的JSON数据无法被解析,req.body.itemName实际为undefined,传给Prisma的name参数自然缺失,触发错误。
解决方案
在你的Express主入口文件(如app.js/server.js)中,在注册路由之前添加express.json()中间件:
const express = require('express'); const app = express(); // 关键:添加JSON解析中间件 app.use(express.json()); // 之后再注册你的api路由 const apiRouter = require('./path/to/api.js'); app.use('/backend/api', apiRouter);
额外验证点
- 前端代码已正确设置
Content-Type: application/json,无需修改; - 确认前端控制台输出的
JSON.stringify({ itemName: itemName })包含有效内容,确保输入框的值已正确获取。
相关代码参考
前端script.js
addItemForm.addEventListener('submit', async (event) => { event.preventDefault(); const itemName = itemNameInput.value.trim(); console.log(JSON.stringify({ itemName: itemName })) if (itemName) { try { await fetch('/backend/api/add-person', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ itemName: itemName }) }); fetchData(); // Refresh the list after adding an item itemNameInput.value = ''; // Clear input field } catch (error) { console.error('Error adding item:', error); } } });
后端api.js
router.post('/add-person', async (req, res) => { const itemName = req.body.itemName; try { await prisma.list.create({ data: { name: itemName } }); res.redirect('/'); } catch (error) { console.error(error); res.status(500).send('Error adding item to database'); } });
Prisma模型定义
model list { id Int @id @default(autoincrement()) name String @db.VarChar(255) }
内容的提问来源于stack exchange,提问作者Shodan4004
相关产品推荐
相关产品推荐

