我正在本地开发一个使用 Nuxt.js 3 并使用 Postgreql 构建的应用程序。我发现我遇到了以下错误消息:
Cannot access 'renderer$1' before initialization
1:没有 Prisma
./plugins/db.js
// import { Client } from 'pg'
import pg from 'pg';
const { Client } = pg;
const { Client } = pg;
const client = new Client({
host: 'localhost',
port: 5432,
database: 'dbname',
user: 'username',
password: 'password',
})
client.connect();
export default client;
第 1 行已被注释掉,但为了记录,如果第 1 行未注释,则会抛出以下错误:
SyntaxError: The requested module './node_modules/pg/lib/index.js' does not provide an export named 'Client'
|第 2 行和第 3 行是此处答案提出的解决方案:Can I import the node-postgres module (pg) or is it only CommonJS?
这会引发
[nuxt] [request error] [unhandled] [500] Cannot access 'renderer$1' before initialization
错误。
请注意,如果我不使用 Nuxt 3 推荐的
defineNuxtPlugin
包装器,这可以工作,但只是一种。如果db.js
如下:
import pg from 'pg';
const { Client } = pg;
const client = new Client({
host: 'localhost',
port: 5432,
database: 'dbname',
user: 'username',
password: 'password',
})
client.connect();
export default client;
在这种情况下,我可以从应用程序中的数据库返回行。
./server/api/test.get.ts
import client from "~/plugins/db";
const rows = client.query('SELECT * from test');
export default defineEventHandler(async() => {
return new Promise<any>((resolve) => {
resolve(rows);
});
});
但是,如果我这样做,其他地方还会出现其他问题:
WARN Plugin ./plugins/db.ts is not wrapped in defineNuxtPlugin. It is advised to wrap your plugins as in the future this may enable enhancements.
Uncaught ReferenceError: Buffer is not defined
2。与 Prisma
我删除了旧的
./plugins/db.ts
代码并浏览了 Prisma 设置指南,结果却出现了相同的 Cannot access 'renderer$1' before initialization
错误:
./server/api/test.get.ts
//import { Pool } from 'pg'
import * as pg from 'pg'
const { Pool } = pg
import { PrismaPg } from '@prisma/adapter-pg'
import { PrismaClient } from '@prisma/client'
const connectionString = `${process.env.DATABASE_URL}`
const pool = new Pool({ connectionString })
const adapter = new PrismaPg(pool)
const prisma = new PrismaClient({ adapter })
export default defineEventHandler(async () => {
return await prisma.notes.findMany();
});
知道可能出了什么问题或者如何解决此错误吗?
也遇到了同样的问题......我主要是由于
.env
文件中缺少API密钥造成的。
通过添加所需的 API 密钥已修复此问题。
我建议仔细检查日志;您可能会在那里找到一些提示。