背景
在本地開發vue專案的時候,當你習慣了proxyTable
解決本地跨域的問題,切換到nuxt
的時候,你會發現,新增了proxyTable
設定並沒有什麼作用,那是因為你是用的vue腳手架生成的vue專案,它裡面已經幫你寫好了相關的proxyTable
的設定程式碼。
build/dev-server.js
// proxy api requests
Object.keys(proxyTable).forEach(function (context) {
var options = proxyTable[context]
if (typeof options === 'string') {
options = { target: options }
}
app.use(proxyMiddleware(options.filter || context, options))
})
這裡是採用的express中介軟體的形式,使用的依賴是http-proxy-middleware
nuxt也有中介軟體的概念,不過這個中介軟體不是express的中介軟體,那麼我們怎麼新增到nuxt裡面去呢?
怎麼做
首先,安裝依賴
npm install --save-dev express http-proxy-middleware
然後在根目錄建立一個檔案server.js
const { Nuxt, Builder } = require('nuxt')
const app = require('express')()
var proxyMiddleware = require('http-proxy-middleware')
var config = require('./nuxt.config')
// 我們用這些選項初始化 Nuxt.js:
const isProd = process.env.NODE_ENV === 'production'
const nuxt = new Nuxt({ dev: !isProd })
// 生產模式不需要 build
if (!isProd) {
const builder = new Builder(nuxt)
builder.build()
}
// proxy api requests這裡就是新增的proxyTable中間價的設定了
var proxyTable = config.dev.proxyTable
Object.keys(proxyTable).forEach(function (context) {
var options = proxyTable[context]
if (typeof options === 'string') {
options = { target: options }
}
app.use(proxyMiddleware(options.filter || context, options))
})
app.use(nuxt.render)//這裡是新增nuxt渲染層服務的中介軟體
app.listen(3000)
console.log('Server is listening on http://localhost:3000')
然後在nuxt.config.js
中新增如下程式碼
module.exports = {
dev: {
proxyTable: {
'/api':
{
target: 'http://localhost:7001', //
pathRewrite: { '^/api': '/' }
}
}
}
}
然後node server.js
執行就可以了。
覺得執行不方便還可以把命令新增到package.json
檔案裡。
{
"scripts": {
"dev": "nuxt --port=8080",
"build": "nuxt build",
"start": "nuxt start",
"generate": "nuxt generate",
"lint": "eslint --ext .js,.vue --ignore-path .gitignore .",
"precommit": "npm run lint",
"server": "node server.js"
}
}