nextjs 设置代理
根目录下新建 server.js 文件
const express = require('express')
const next = require('next')
const { createProxyMiddleware } = require("http-proxy-middleware")
// 配置运行端口
const port = process.env.PORT || 3000
// 判断是否为开发环境
const dev = process.env.NODE_ENV !== 'production'
// 初始化 app
const app = next({ dev })
const handle = app.getRequestHandler()
// 代理配置表,这里和一般的 webpack 配置是一样的。
const proxyTable = require('./config/prod.config.js')
// const proxyTable = {
// '/uaa/oauth': {
// target: 'http://10.0.2.66:8603',
// pathRewrite: {
// '^/uaa/oauth': '/uaa/oauth'
// },
// changeOrigin: true
// }
// }
app.prepare().then(() => {
const server = express()
// 如果是开发环境,则代理接口
Object.keys(proxyTable).forEach((key) => {
server.use(key, createProxyMiddleware(proxyTable[key]));
})
// 托管所有请求
server.all('*', (req, res) => {
return handle(req, res)
})
server.listen(port, (err) => {
if (err) throw err
console.log(`> Ready on http://localhost:${port} 或 http://127.0.0.1:${port}`)
})
}).catch(err => {
console.log('Error:::::', err)
})
配置文件
api.config.js
// const PRODUCTION = 'production'
// true:生产环境
// const isProd = process.env.NODE_ENV === PRODUCTION || process.env.PROD_ENV === PRODUCTION
// docker api配置
const NODE_PRO_URL = process.env.NODE_PRO_URL
// host api 配置
const HOST_URL = '10.202.11.16'
// 生产环境URL
const proUrl = NODE_PRO_URL || `http://${HOST_URL}:25097`
const baseUrl = proUrl
module.exports = {
// isProd,
baseUrl,
}
prot.config.js
module.exports = {
host: process.env.HOST || '127.0.0.1',
port: process.env.PORT || 3000
}
prod.config.js
const { baseUrl } = require('./api.config.js')
module.exports = {
'/api': {
target: baseUrl,
pathRewrite: { '^/api': '' },
changeOrigin: true,
},
}
特别注意:
需要修改package.json命令
"scripts": {
"debug": "node server.js --hostname 127.0.0.1",
"build": "next build",
"start": "NODE_ENV=production node server.js",
"lint": "next lint"
},