在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ nuxt中接口跨域代理失效的問題

nuxt中接口跨域代理失效的問題

在nuxt.js中引入@gauseen/nuxt-proxy模塊解決接口跨域限制,但是頁面訪問報錯

clipboard.png

nuxt.config.js配置如下

module.exports = {
    ...
    
    modules: [
        // 請求代理配置,解決跨域
        '@gauseen/nuxt-proxy',
    ],
    proxyTable: [
        '/api',
        {
            target: 'http://192.168.1.181:3004', // api主機
            ws: true,
            pathRewrite: { '^/api': '/' }
        }
    ]
     
    ...
}

axios請求如下

axios.post('/login', data)

但是把proxyTable這個注釋掉就行了,頁面回復訪問,到底是什么原因引起的呢?有沒有解決方案

回答
編輯回答
貓小柒

你可以換一個官方的模塊
像我就是這樣使用的
clipboard.png

模塊地址: https://github.com/nuxt-commu...

2017年3月2日 16:32
編輯回答
尛憇藌

如果你翻出來vue-cli腳手架生成的vue項目,你會發(fā)現(xiàn)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))
})

沒錯,你說的這個proxyTable 就是一個express的中間件,但是這個express中間件和nuxt的中間件又不一樣。具體怎么添加進去,貌似官方也沒有說明。nuxt本地開發(fā)的時候貌似也是用的express。


經(jīng)過我一番努力,終于把你這個東西弄出來了。在nuxt中如何添加express中間件?

首先,安裝依賴
npm install --save-dev express http-proxy-middleware
然后在根目錄創(chuàng)建一個文件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"
    }
}
2017年3月23日 11:12