如何在nuxt中新增proxyTable代理

weixin_34220963發表於2018-08-09

背景

在本地開發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"
    }
}

相關文章