在Nuxt 3中调用dotenv.config()报错:process.cwd is not a function
Nuxt3集成Drizzle时process.cwd is not a function错误解决
你在Nuxt3中集成Drizzle时,编写了/server/db/index.ts代码如下:
import { sql } from '@vercel/postgres'; import { drizzle } from 'drizzle-orm/vercel-postgres'; import dotenv from 'dotenv'; import * as schema from './schema'; import path from 'path' dotenv.config({ path: '../../.env' }); export const db = drizzle(sql, { schema });
在组件中导入db时出现500错误:
500 process.cwd is not a function at Object.configDotenv (http://localhost:3000/_nuxt/node_modules/.cache/vite/client/deps/dotenv.js?v=c9c673b9:267:47) at Object.config (http://localhost:3000/_nuxt/node_modules/.cache/vite/client/deps/dotenv.js?v=c9c673b9:314:29) at http://localhost:3000/_nuxt/server/db/index.ts?t=1720792472809:5:8
问题原因
- Nuxt3的
/server目录属于服务端专属代码,不能直接在客户端组件中导入使用,客户端环境中不存在process对象,导致调用dotenv.config()时触发process.cwd is not a function错误。 - 手动调用
dotenv.config()完全多余——Nuxt3会自动加载项目根目录的.env文件,无需手动配置。
解决步骤
- 修改数据库配置文件
移除dotenv相关代码,Nuxt3会自动处理环境变量:
import { sql } from '@vercel/postgres'; import { drizzle } from 'drizzle-orm/vercel-postgres'; import * as schema from './schema'; export const db = drizzle(sql, { schema });
- 通过服务端API间接操作数据库
所有数据库操作必须放在服务端上下文(如/server/api、/server/routes)中,客户端通过API请求获取数据。
示例:创建服务端API路由
在/server/api/get-records.ts中编写:
import { db } from '../db/index'; import { yourTable } from '../db/schema'; export default defineEventHandler(async () => { const records = await db.select().from(yourTable); return records; });
- 客户端组件调用API
在组件中通过useFetch请求服务端API:
<script setup> const { data: records } = await useFetch('/api/get-records'); </script> <template> <div v-for="record in records" :key="record.id"> {{ record }} </div> </template>
内容的提问来源于stack exchange,提问作者PrestonDocks
相关产品推荐
相关产品推荐

