如何部署NextJS + Express服务,生产环境配置及Heroku部署方法问询
生产环境代码补全方案
你需要先在Express入口文件顶部引入NextJS依赖:const next = require('next')
然后将生产环境判断块的代码替换为以下内容即可:
// if isDev === 'production' if(!isDev) { // 初始化生产模式的NextJS实例,dir参数指向你的前端代码存放目录 const nextApp = next({ dev: false, dir: './client' }) const nextRequestHandler = nextApp.getRequestHandler() const startProduction = async () => { try { // 连接生产环境数据库 await mongoose.connect(process.env.DBURL, { useNewUrlParser: true, useUnifiedTopology: true }) // 等待NextJS完成生产环境资源初始化 await nextApp.prepare() // 所有非/api前缀的请求全部交给NextJS处理,支持SSR/SSG/静态资源加载 app.all('*', (req, res) => { return nextRequestHandler(req, res) }) // 启动服务,Heroku会自动注入PORT环境变量,无需手动修改 app.listen(PORT, () => console.log(`生产服务已启动,监听端口:${PORT}`)) } catch (error) { console.error('生产服务启动失败:', error) process.exit(1) } } startProduction() }
Heroku部署配置步骤
- 配置根目录
package.json的脚本规则,Heroku部署时会自动执行build命令构建资源,执行start命令启动服务:
请将上述代码中的「你的服务入口文件名.js」替换为server目录下实际的入口文件名,比如{ "scripts": { "build": "cd client && npm install && npm run build && cd ../server && npm install", "start": "cd server && node 你的服务入口文件名.js" } }index.js、server.js。 - 在Heroku后台配置环境变量,路径为:应用后台 → Settings → Config Vars,新增以下变量:
NODE_ENV:值填productionDBURL:值填你的生产环境MongoDB连接地址,推荐使用MongoDB Atlas的免费实例CLIENT_URL:值填你的Heroku应用域名,格式为https://你的应用名.herokuapp.com,不要加末尾斜杠
- 调整
.gitignore规则,排除client/.next、node_modules、.env这类不需要提交的文件,Heroku会自动安装依赖、构建资源 - 正常提交代码到Heroku仓库即可完成部署,Heroku会自动执行构建、启动流程
常见问题排查
- 如果启动时提示找不到
next模块,确认client目录的package.json已安装next依赖,也可以将next安装到根目录依赖中解决 - 如果调用接口提示跨域,检查CORS配置中的
origin值是否和生产环境域名完全匹配 - 如果NextJS页面加载失败,确认初始化NextJS实例时的
dir路径正确,你的前端代码存放在client目录,填./client即可
内容的提问来源于stack exchange,提问作者Evgeny Alekseev
相关产品推荐
相关产品推荐

