如何在nuxt中添加proxyTable代理

背景

在本地開發vue項目的時候,當你習慣了proxyTable解決本地跨域的問題,切換到nuxt的時候,你會發現,添加了proxyTable設置並無什麼做用,那是由於你是用的vue腳手架生成的vue項目,它裏面已經幫你寫好了相關的proxyTable的設置代碼。vue

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裏面去呢?node


怎麼作

首先,安裝依賴
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文件裏。git

{
     "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"
    }
}
相關文章
相關標籤/搜索