Prisma+Express报错:Cannot read properties of undefined (reading 'create')
解决Prisma
usercontact.create 抛出"Cannot read properties of undefined"错误 这个错误的核心原因是代码中的prisma.usercontact对象不存在,大概率是Prisma Client未正确初始化、模型未同步生成到Client,或者导入路径错误导致的。以下是具体解决步骤:
1. 确认Prisma Client已正确初始化
首先你需要创建并导出Prisma Client实例,在项目中新建(或检查)一个Prisma配置文件,比如prisma/client.js:
// prisma/client.js const { PrismaClient } = require('@prisma/client'); const prisma = new PrismaClient(); module.exports = prisma;
然后在你的Express路由文件中正确导入这个实例:
const prisma = require('./prisma/client.js'); // 路径根据你的项目结构调整
如果使用ES模块,改用import语法即可。
2. 重新生成Prisma Client
每次修改schema.prisma后,必须执行命令更新Prisma Client,否则新添加的模型不会被生成到Client中:
npx prisma generate
执行完成后,检查node_modules/@prisma/client目录下是否包含usercontact相关的类型定义和方法。
3. 验证模型名称与Client命名匹配
Prisma Client会将PascalCase的模型名转换为小写开头的驼峰式(或全小写,取决于模型名结构)。你可以查看node_modules/@prisma/client/index.d.ts文件,搜索Usercontact对应的Client属性名,确保代码中调用的prisma.usercontact与生成的属性名完全一致。
4. 检查请求体解析中间件
确保你的Express应用已经添加了解析JSON请求体的中间件,否则req.body会是undefined,后续解构formData也会出错:
app.use(express.json());
修正后的完整路由代码
const express = require('express'); const prisma = require('./prisma/client.js'); const app = express(); // 解析JSON请求体 app.use(express.json()); app.post("/api/addUserContact", async (req, res) => { console.log("trying in the addUserContactInfo ") try { // req.body无需await,直接解构 const { formData } = req.body; const { username, email, subject, message } = formData; console.log(formData); const newUserQuery = await prisma.usercontact.create({ data: { username, email, subject, message, }, }); res.status(201).send("Created"); console.log("User contact query has been successfully created "); } catch(error) { res.sendStatus(500); console.error("Error creating user", error); } });
内容的提问来源于stack exchange,提问作者Mohammad Rizabul
相关产品推荐
相关产品推荐

