NextJS项目使用DotEnv环境变量连接MySQL数据库报错如何解决?
问题排查与解决方法
- 确认代码运行环境
数据库连接属于敏感操作,必须运行在NextJS服务端环境。如果你的连接代码写在客户端组件(无'use server'标记、或直接在客户端渲染逻辑中调用),非NEXT_PUBLIC_前缀的环境变量无法被读取。将数据库连接逻辑单独抽离到服务端工具文件,顶部添加'use server'明确标记服务端运行。 - 修正端口数据类型
process.env中所有变量默认是字符串类型,而多数MySQL驱动要求port参数为数字类型。你明文配置时用的是数字3306,而从环境变量读取的是字符串"3306",类型不匹配会导致连接失败,需要显式转换为数字:
port: parseInt(process.env.MYSQL_PORT, 10)
- 检查.env.local文件格式
不要在变量声明的等号两侧添加空格,值无特殊字符时不需要加引号,错误写法示例:
MYSQL_HOST = "127.0.0.1"
正确写法示例:
MYSQL_HOST=127.0.0.1
MYSQL_PORT=3306
MYSQL_DATABASE=mydatabase
MYSQL_USER=myuser
MYSQL_PASSWORD=123
- 确认服务已重启
修改.env系列文件后,必须手动重启NextJS开发服务,环境变量才会被重新加载,热更新不会触发env变量更新。 - 添加调试日志确认变量加载
在数据库连接代码前添加日志,检查终端输出的变量值是否符合预期:
console.log('环境变量校验:', process.env.MYSQL_HOST, process.env.MYSQL_PORT)
修正后代码示例
'use server' const db = mysql({ config: { host: process.env.MYSQL_HOST, port: parseInt(process.env.MYSQL_PORT, 10), database: process.env.MYSQL_DATABASE, user: process.env.MYSQL_USER, password: process.env.MYSQL_PASSWORD } });
内容的提问来源于stack exchange,提问作者Pablo Cabrera
相关产品推荐
相关产品推荐

