在JavaScript/TypeScript代码中集成Prisma ORM遇错误求助
问题与解决方案
背景
正在将纯JavaScript项目迁移至TypeScript并集成Prisma ORM,TypeScript文件运行正常,但JavaScript文件执行时报错。
配置与代码
tsconfig.json 配置
{ "compilerOptions": { "target": "es6", "module": "commonjs", "sourceMap": true, "outDir": "/src", "strict": true, "skipLibCheck": true, "declaration": true, "moduleResolution": "node", "esModuleInterop": true, "forceConsistentCasingInFileNames": true , "experimentalDecorators": true, "allowJs": true }, "include": ["src/**/*"], "exclude": ["node_modules", ".vscode"] }
正常运行的TypeScript文件(type_dummy.ts)
import { PrismaClient } from '@prisma/client' const prisma = new PrismaClient() main() async function main() { const allUsers = await prisma.client.findMany() console.log(allUsers) }
报错的JavaScript文件(java_dummy.js)
const { PrismaClient } = require('@prisma/client') uploadsripts.post("/test_prisma",(req,res)=>{ main().catch(e => { console.log(e); }) async function main() { const allUsers = await PrismaClient.client.findMany() console.log(allUsers) } })
错误信息
0|server | TypeError: Cannot destructure property 'name' of 'undefined' as it is undefined. 0|server | at normalizeSignal (/Users/abhishek/Documents/node/ec_node/node_modules/@prisma/client/runtime/index.js:3828:7) 0|server | at Array.map (<anonymous>) 0|server | at getSignals (/Users/abhishek/Documents/node/ec_node/node_modules/@prisma/client/runtime/index.js:3823:62) 0|server | at getSignalsByName (/Users/abhishek/Documents/node/ec_node/node_modules/@prisma/client/runtime/index.js:3855:47) 0|server | at ../../node_modules/.pnpm/human-signals@2.1.0/node_modules/human-signals/build/src/main.js (/Users/abhishek/Documents/node/ec_node/node_modules/@prisma/client/runtime/index.js:3864:25) 0|server | at __require (/Users/abhishek/Documents/node/ec_node/node_modules/@prisma/client/runtime/index.js:11:51) 0|server | at ../../node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/error.js (/Users/abhishek/Documents/node/ec_node/node_modules/@prisma/client/runtime/index.js:3906:29) 0|server | at __require (/Users/abhishek/Documents/node/ec_node/node_modules/@prisma/client/runtime/index.js:11:51) 0|server | at ../../node_modules/.pnpm/execa@5.1.1/node_modules/execa/index.js (/Users/abhishek/Documents/node/ec_node/node_modules/@prisma/client/runtime/index.js:4635:21) 0|server | at __require (/Users/abhishek/Documents/node/ec_node/node_modules/@prisma/client/runtime/index.js:11:51) 0|server | at Object.<anonymous> (/Users/abhishek/Documents/node/ec_node/node_modules/@prisma/client/runtime/index.js:20119:28) 0|server | at Module._compile (node:internal/modules/cjs/loader:1126:14) 0|server | at Object.Module._extensions..js (node:internal/modules/cjs/loader:1180:10) 0|server | at Module.load (node:internal/modules/cjs/loader:1004:32) 0|server | at Function.Module._load (node:internal/modules/cjs/loader:839:12) 0|server | at Module.require (node:internal/modules/cjs/loader:1028:19)
问题原因
JavaScript代码中直接通过PrismaClient.client.findMany()调用模型方法,未先实例化PrismaClient。Prisma要求必须创建客户端实例后才能访问对应的模型操作。
修复后的JavaScript代码
const { PrismaClient } = require('@prisma/client') // 实例化PrismaClient const prisma = new PrismaClient() uploadsripts.post("/test_prisma", async (req, res) => { try { const allUsers = await prisma.client.findMany() console.log(allUsers) // 向客户端返回查询结果 res.status(200).json(allUsers) } catch (e) { console.error(e); // 返回错误信息 res.status(500).json({ error: e.message }) } })
额外注意
- 确保路由回调处理异步逻辑,使用
async/await并正确捕获异常 - 及时给客户端返回响应,避免请求超时
- PrismaClient实例建议全局创建,避免重复实例化
内容的提问来源于stack exchange,提问作者Android Geek
相关产品推荐
相关产品推荐

