我在使用prisma seed时遇到了一个以前从未遇到过的奇怪问题,我很难理解是什么原因导致了这个问题,这个应用程序托管在一个nextjs全栈项目中。
我有下面的prisma初始化脚本:
const prisma = new PrismaClient();
export default prisma;
在我的应用程序(next dev
)中使用prisma时,一切正常,查询正在执行。
但是,当我尝试运行seed脚本时,它失败了,并显示TypeError: Cannot read properties of undefined (reading 'findFirst')
下面是种子脚本:
async function main() {
const existingUser = await db.user.findFirst();
// ...not relevant
}
main()
.then(async () => await db.$disconnect())
.catch(async e => {
console.error(e);
await db.$disconnect();
process.exit(1);
});
软件包. json棱镜部分:
"prisma": {
"seed": "ts-node src/server/db/seed.ts",
"schema": "src/server/db/schema.prisma"
},
ts节点部分的tsconfig.json:
"ts-node": {
"require": ["tsconfig-paths/register"],
"transpileOnly": true,
"compilerOptions": {
"module": "commonjs"
}
},
在seed脚本上打印prisma客户机返回{}
,而不是我在dev模式下打印时看到的实际示例。
任何想法都是受欢迎的,谢谢!
1条答案
按热度按时间pieyvz9o1#
几个小时的调试之后,我终于找到了问题所在,这个代码片段位于prisma运行时配置中:
我已经看到,当前两个变量输出结果时,创建一个
new Set
实际上返回一个空数组,而不是真实的值。默认情况下,NextJS使用
es5
作为tsconfig.ES5中的目标,但是ES5还没有Set
结构,这是导致问题的原因。升级到
es2015
解决了问题。我只是在期待某种错误,而不是沉默的失败。