部署在Heroku的Express应用打开时出现ERR_NAME_NOT_RESOLVED错误求助
问题分析与解决方案
1. 直接解决域名解析错误
Heroku默认应用域名格式为[应用名称].herokuapp.com,不支持www.前缀的子域名(仅自定义域名可配置www前缀的CNAME记录)。你当前访问的www.damp-garden-69923.herokuapp.com无效,正确访问地址应为:damp-garden-69923.herokuapp.com
2. 修正端口监听逻辑
虽然代码中写了process.env.PORT || nconf.get('port'),但需确保以下两点:
- Heroku会自动注入
PORT环境变量,服务必须监听该动态分配的端口,不能依赖硬编码端口 - 修复
server变量未声明的全局变量风险,同时添加启动日志便于排查:
import http from 'http'; import express from 'express'; import pagesRouter from './routes/pages'; import nconf from 'nconf'; const app = express(); app.use(pagesRouter); const port = process.env.PORT || nconf.get('port'); // 声明server变量,添加启动日志 const server = http.createServer(app); server.listen(port, () => { console.log(`Server running on port ${port}`); });
3. 优化Dockerfile配置
调整Dockerfile的工作目录和端口声明,避免潜在环境歧义:
FROM node:18.12.1 # 使用规范工作目录,避免当前目录冲突 WORKDIR /app COPY . . ENV NODE_ENV production RUN npm ci RUN npm run build RUN npm prune --production # 动态适配Heroku的PORT环境变量 EXPOSE ${PORT:-6001} CMD ["npm", "run", "start"]
4. 确认Heroku部署状态
通过Heroku GUI完成以下检查:
- 进入「Deploy」标签,确认最新部署显示「Deployed successfully」
- 进入「Resources」标签,确认web进程处于「Running」状态(进程崩溃也可能导致域名无法访问)
内容的提问来源于stack exchange,提问作者Philip Saville
相关产品推荐
相关产品推荐

