React项目Node.js服务端运行npm start时出现HostNotFoundError报错求助
问题:React项目服务端执行
npm start时出现SequelizeHostNotFoundError 错误核心信息:
HostNotFoundError [SequelizeHostNotFoundError]: getaddrinfo ENOTFOUND undefined
完整错误栈:
[0] HostNotFoundError [SequelizeHostNotFoundError]: getaddrinfo ENOTFOUND undefined [0] parent: Error: getaddrinfo ENOTFOUND undefined [0] at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:107:26) { [0] errno: -3008, [0] code: 'ENOTFOUND', [0] syscall: 'getaddrinfo', [0] hostname: 'undefined' [0] }, [0] original: Error: getaddrinfo ENOTFOUND undefined [0] at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:107:26) { [0] errno: -3008, [0] code: 'ENOTFOUND', [0] syscall: 'getaddrinfo', [0] hostname: 'undefined' [0] } [0] }
环境信息:
- Node.js: v18.16.1
- sequelize: v6.31.1
复现步骤:
- 进入项目服务端文件夹
- 执行
npm start
解决方案
这个错误的核心原因是Sequelize连接数据库时,读取到的主机地址(hostname)为undefined,导致DNS无法解析目标地址。以下是具体排查和修复步骤:
1. 检查数据库连接配置文件(db.js)
打开服务端的db.js文件,定位Sequelize初始化代码段:
- 若通过环境变量读取主机地址(如
process.env.DB_HOST),检查变量名拼写是否正确(避免大小写错误或拼写失误)。 - 若为硬编码值,确认填写了有效主机地址(如
localhost、127.0.0.1或远程数据库IP),而非留空或undefined。
示例正确初始化代码:
const sequelize = new Sequelize( process.env.DB_NAME, process.env.DB_USER, process.env.DB_PASSWORD, { host: process.env.DB_HOST || 'localhost', dialect: 'postgres' // 根据你的数据库类型调整 } );
2. 确认环境变量文件(.env)配置
- 检查服务端文件夹下是否存在
.env文件,若缺失则新建。 - 在
.env中添加正确的数据库配置项:DB_HOST=localhost DB_NAME=你的数据库名 DB_USER=你的数据库用户名 DB_PASSWORD=你的数据库密码 - 注意:
.env通常会被.gitignore排除以保障安全,需自行在本地创建该文件。
3. 确保环境变量被正确加载
在db.js的最顶部,确认已引入并调用dotenv加载环境变量:
require('dotenv').config();
若未安装dotenv,先执行安装命令:
npm install dotenv
4. 验证环境变量读取有效性
在db.js中添加日志代码,测试环境变量是否正常读取:
console.log('DB Host:', process.env.DB_HOST);
执行npm start后,若输出为undefined,说明环境变量未正确加载,需检查.env文件路径是否正确,或dotenv调用是否在配置读取之前。
内容的提问来源于stack exchange,提问作者Byron Martinez
相关产品推荐
相关产品推荐

