NestJS中导入mysql2/promise包失败,调用createConnection报错
问题
在NestJS项目中按照Drizzle ORM的MySQL集成指引操作,导入mysql2/promise包时出现异常,实现代码如下:
import { drizzle } from "drizzle-orm/mysql2"; import mysql from "mysql2/promise"; import * as schema from './schema'; export const DrizzleAsyncProvider = 'drizzleProvider'; export const drizzleProvider = { provide: DrizzleAsyncProvider, useFactory: async () => { console.log(mysql, '<<<'); const connection = await mysql.createConnection({ host: 'host', user: 'user', database: 'database', password: 'password' }); const db = drizzle(connection, { schema, mode: 'default' }); return db; }, exports: [DrizzleAsyncProvider], }
运行时抛出错误:
[Nest] 16326 - 04/20/2024, 8:31:46 PM LOG [NestFactory] Starting Nest application... undefined <<< [Nest] 16326 - 04/20/2024, 8:31:46 PM ERROR [ExceptionHandler] Cannot read properties of undefined (reading 'createConnection') TypeError: Cannot read properties of undefined (reading 'createConnection')
错误显示导入的mysql对象为undefined,无法调用createConnection方法。
解决方案
重新安装mysql2依赖
先排查是否依赖安装不完整,执行命令重新安装:npm uninstall mysql2 && npm install mysql2 # 若使用pnpm或yarn,替换为对应包管理器命令调整导入语法
mysql2/promise的导出格式可能和默认导入不兼容,可改用两种方式:- 直接导入
createConnection方法:import { drizzle } from "drizzle-orm/mysql2"; import { createConnection } from "mysql2/promise"; import * as schema from './schema'; // ... useFactory中直接调用 const connection = await createConnection({ /* 配置项 */ }); - 使用命名空间导入,并确保TypeScript配置正确:
同时在项目根目录的import * as mysql from "mysql2/promise";tsconfig.json中开启ES模块兼容:{ "compilerOptions": { "esModuleInterop": true, "allowSyntheticDefaultImports": true } }
- 直接导入
验证NestJS模块配置
确认drizzleProvider已被添加到对应模块的providers数组中,若需要跨模块复用,需在模块的exports数组中声明DrizzleAsyncProvider。
内容的提问来源于stack exchange,提问作者i474
相关产品推荐
相关产品推荐

