Next.js+Prisma创建用户报错:未找到简写属性的作用域值
解决"No value exists in scope for the shorthand property 'firstName'"报错
问题根源
你在prisma.user.create的data参数中使用了对象简写语法(如firstName),但这些变量在当前函数作用域内并未定义——你没有从传入的FormData对象中提取对应字段的值。此外代码还存在字段拼写错误和类型不匹配的问题,需要一并修正。
解决方案步骤及修正后代码
- 从FormData提取字段值:通过
FormData.get()方法获取每个表单字段的值 - 修正拼写错误:将
streetAdddress改为与Prisma Schema一致的streetAddress - 类型转换:将FormData返回的字符串值转换为Prisma模型要求的类型(如Int转数字、DateTime转Date对象)
修正后的createUser函数:
export async function createUser(user: FormData) { const prisma = new PrismaClient() // 提取并转换FormData中的字段 const firstName = user.get('firstName') as string const lastName = user.get('lastName') as string const middleName = user.get('middleName') as string | null const email = user.get('email') as string const dateOfBirth = new Date(user.get('dateOfBirth') as string) const mobileNumber = user.get('mobileNumber') as string const idType = user.get('idType') as string const idNumber = user.get('idNumber') as string const idExpirtyDate = new Date(user.get('idExpirtyDate') as string) const idIssueState = new Date(user.get('idIssueState') as string) const streetAddress = user.get('streetAddress') as string const suburb = user.get('suburb') as string const postCode = parseInt(user.get('postCode') as string, 10) const state = user.get('state') as string const bsb = parseInt(user.get('bsb') as string, 10) const accountNumber = parseInt(user.get('accountNumber') as string, 10) const payIdType = user.get('payIdType') as string const payId = user.get('payId') as string await prisma.user.create({ data: { firstName, lastName, middleName, email, dateOfBirth, mobileNumber, idType, idNumber, idExpirtyDate, idIssueState, streetAddress, suburb, postCode, state, bsb, accountNumber, payIdType, payId, }, }) }
额外优化建议
- 添加空值校验:如果表单字段为必填项,建议在转换前检查是否为空,避免运行时错误:
const postCodeStr = user.get('postCode') if (!postCodeStr) throw new Error('邮政编码为必填项') const postCode = parseInt(postCodeStr, 10) - 定义表单类型:创建TypeScript接口约束表单字段,提升代码可读性和类型安全性:
interface UserFormFields { firstName: string lastName: string middleName?: string email: string dateOfBirth: string // 其他字段类型定义... }
内容的提问来源于stack exchange,提问作者Nadun Perera
相关产品推荐
相关产品推荐

