You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行TypeScript编写的Lambda函数时遇‘Cannot find module 'mysql2/promise'’错误

解决Lambda连接Aurora时"Cannot find module 'mysql2/promise'"错误

问题根源

报错核心原因是mysql2的Promise API导入方式错误,或部署包未包含mysql2依赖,结合你的Node.js 18环境和TypeScript配置,可按以下步骤排查修复:

步骤1:修正mysql2的导入语句

你的代码未明确导入mysql2的Promise模块,需调整导入逻辑:

  • 对应你tsconfig中module: commonjs的CommonJS风格:
    const mysql = require('mysql2/promise');
    
  • 若后续切换为ES模块风格,需将module改为ESNext并在package.json添加"type": "module":
    import mysql from 'mysql2/promise';
    

修正后的完整Lambda代码:

const mysql = require('mysql2/promise');

exports.handler = async (event) => {
    let connection;
    try {
        connection = await mysql.createConnection({
            host: 'your-rds-endpoint',
            user: 'your-username',
            password: 'your-password',
            database: 'your-database'
        });
        const [rows, fields] = await connection.execute('SELECT * FROM your_table');
        return {
            statusCode: 200,
            body: JSON.stringify(rows)
        };
    } catch (err) {
        return {
            statusCode: 500,
            body: JSON.stringify({
                message: 'Error: ' + err.message
            })
        };
    } finally {
        if (connection) await connection.end(); // 需添加await,end方法为异步操作
    }
};

步骤2:确保mysql2依赖被打包进Lambda部署包

Lambda运行环境不自带第三方依赖,必须将mysql2包含在部署包中:

  • 手动打包:执行npm install mysql2 --save后,将dist目录(编译后的代码)和node_modules目录一起压缩为zip文件上传。
  • 用构建工具(如esbuild)打包:执行以下命令,工具会自动将mysql2合并到输出文件中:
    esbuild src/lambda/your-function.ts --bundle --platform=node --target=node18 --outfile=dist/index.js
    
    注意:不要在配置中排除node_modules,确保依赖被正确打包。

步骤3:验证tsconfig配置兼容性

你的tsconfig当前配置与Node.js 18兼容,无需大幅修改,仅需注意:

  • rootDir和outDir路径需正确,确保编译后的代码结构与依赖路径匹配。

内容的提问来源于stack exchange,提问作者Karim Fayed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 05:50:23