NodeJS Prisma种子-无法读取未定义的属性(阅读“findFirst”)

yrdbyhpb  于 2023-01-25  发布在  Node.js
关注(0)|答案(1)|浏览(157)

我在使用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模式下打印时看到的实际示例。
任何想法都是受欢迎的,谢谢!

pieyvz9o

pieyvz9o1#

几个小时的调试之后,我终于找到了问题所在,这个代码片段位于prisma运行时配置中:

const dmmfModelKeys = Object.keys(client._baseDmmf.modelMap);
  const jsModelKeys = dmmfModelKeys.map(dmmfToJSModelName);
  const allKeys = [...new Set(dmmfModelKeys.concat(jsModelKeys))];

我已经看到,当前两个变量输出结果时,创建一个new Set实际上返回一个空数组,而不是真实的值。
默认情况下,NextJS使用es5作为tsconfig.ES5中的目标,但是ES5还没有Set结构,这是导致问题的原因。
升级到es2015解决了问题。
我只是在期待某种错误,而不是沉默的失败。

相关问题