Prisma嵌套写入时出现类型错误:userId无法赋值
问题分析与解决方案
可能原因1:Prisma客户端未更新
你的Payment模型中userId定义为Int?(可选整数),但报错显示number无法赋值给undefined,大概率是Prisma客户端的类型定义和当前schema不一致。修改schema后必须重新生成客户端,才能让新的类型定义生效。
解决步骤:
- 运行命令重新生成Prisma客户端:
npx prisma generate
- 重启API服务,确保新的类型定义被加载。
可能原因2:当前路由中req.user未正确注入
虽然你已扩展Express的Request类型且其他控制器正常,但不排除当前路由缺少验证中间件(比如JWT验证中间件),导致req.user为undefined,进而req.user.id触发"访问undefined属性"的类型错误。
验证与解决:
- 在
createPayment函数开头添加日志,确认req.user是否存在:
console.log('req.user:', req.user);
- 如果输出为
undefined,检查该路由是否挂载了正确的用户验证中间件,确保请求到达控制器前已完成用户信息注入。
可能原因3:类型推断边界问题
如果以上两种情况都排除,可以尝试改用Prisma的关联写法(connect)绕过类型推断问题,这种写法也更符合Prisma的关联操作规范:
修改后的创建代码示例:
const payment = await prisma.payment.create({ data: { user: { connect: { id: req.user.id } }, price: totalPrice, email: req.user.email, cart: { create: { CartItem: { create: paymentProducts.map((product) => ({ productId: product.id, quantity: product.quantity, unitPrice: product.price, totalPrice: product.price * product.quantity, })), }, }, }, }, });
内容的提问来源于stack exchange,提问作者Eexy
相关产品推荐
相关产品推荐

