解決Nuxt使用axios跨域問(wèn)題
Nuxt 是 Vue 項(xiàng)目服務(wù)器端渲染(SSR)解決方案。而在使用時(shí),就會(huì)遇到前后端分離情況下的域名或端口不一致導(dǎo)致的跨域問(wèn)題。本文將介紹如何通過(guò)設(shè)置代理解決 Nuxt 與 axios 集成的跨域問(wèn)題。
解決跨域
Nuxt 使用 axios 為避免出現(xiàn)前端頁(yè)面跨域問(wèn)題,需要安裝 @nuxtjs/axios 和 @nuxtjs/proxy 兩個(gè)模塊。
用 yarn 安裝:
yarn add axios @nuxtjs/axios @nuxtjs/proxy
使用 npm 安裝:
npm install axios @nuxtjs/axios @nuxtjs/proxy
注意:不需要手動(dòng)注冊(cè) @nuxtjs/proxy 模塊,但是必須要確保它在依賴項(xiàng)中。
安裝完成后在 nuxt.config.js 文件里面添加以下配置:
module.exports = {
/*
** Nuxt.js modules
*/
modules: ["@nuxtjs/axios"],
/*
** axios proxy
*/
axios: {
proxy: true
},
/*
** proxy
*/
proxy: {
"/api": "http://localhost:3000"
},
/*
** Build configuration
** See https://nuxtjs.org/api/configuration-build/
*/
build: {
vendor: ["axios"]
}
}
到此,代理設(shè)置完成,可以測(cè)試以下跨域問(wèn)題是否解決。
擴(kuò)展 axios
創(chuàng)建 nuxt 插件,更改全局配置全局配置自定義 axios,在 plugins/ 目錄下新建 axios.js 文件:
// plugins/axios.js
export default function({ $axios, redirect }) {
$axios.onResponse(res => {
return res.data
})
$axios.onError(error => {
const code = parseInt(error.response && error.response.status);
if (code === 400) {
redirect("/400");
}
});
}
在 nuxt.config.js 中配置 axios.js 插件:
module.exports = {
/*
** Plugins to load before mounting the App
** https://nuxtjs.org/guide/plugins
*/
plugins: ["@/plugins/axios"],
}
使用 axios 插件
通過(guò)上面的設(shè)置后,使用 axios 插件需要注意的是在 asyncData 內(nèi)和在 asyncData 外的使用是所不同的。
** 在 asyncData 里使用:**
async asyncData({ $axios }) {
const ip = await $axios.get('http://icanhazip.com')
return { ip }
}
** 在 asyncData 外使用:**
methods: {
async fetchSomething() {
const ip = await this.$axios.get('http://icanhazip.com')
this.ip = ip
}
}
更多關(guān)于 Nuxt 與 axios 的集成介紹可以查看官方文檔——Axios模塊。
附錄:nuxt使用axios的跨域處理配置
npm i axios qs npm i @nuxtjs/axios @nuxtjs/proxy --save-dev
plugins/axios.js
使用qs將請(qǐng)求從參數(shù)轉(zhuǎn)化位字符串
import qs from "qs";
export default function({ $axios, redirect }) {
$axios.onRequest(config => {
config.data = qs.stringify(config.data, {
allowDots: true //Option allowDots can be used to enable dot notation
});
return config;
});
$axios.onResponse(response => {
return Promise.resolve(response.data);
});
$axios.onError(error => {
return Promise.reject(error);
});
}
nuxt.config.js
plugins: [
{ src: "~plugins/axios.js", ssr: true },
],
//處理跨域問(wèn)題
modules: ["@nuxtjs/axios", "@nuxtjs/proxy"],
axios: {
retry: { retries: 3 },
//開發(fā)模式下開啟debug
debug: process.env._ENV == "production" ? false : true,
//設(shè)置不同環(huán)境的請(qǐng)求地址
baseURL:
process.env._ENV == "production"
? "http://localhost:3000/api"
: "http://localhost:3000/api",
withCredentials: true,
},
proxy: {
//開啟代理
"/api/": {
target: "http://192.168.1.2:10086/v1",
pathRewrite: { "^/api/": "" }
}
}
在頁(yè)面使用使用this.$axios做請(qǐng)求
到此這篇關(guān)于解決Nuxt使用axios跨域問(wèn)題的文章就介紹到這了,更多相關(guān)Nuxt使用axios跨域內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- vue如何解決axios請(qǐng)求前端跨域問(wèn)題
- 解決vue axios跨域 Request Method: OPTIONS問(wèn)題(預(yù)檢請(qǐng)求)
- 解決vue跨域axios異步通信問(wèn)題
- Vue.js 中 axios 跨域訪問(wèn)錯(cuò)誤問(wèn)題及解決方法
- 基于axios 解決跨域cookie丟失的問(wèn)題
- vue2.0 axios跨域并渲染的問(wèn)題解決方法
- vue中axios解決跨域問(wèn)題和攔截器的使用方法
- 完美解決axios跨域請(qǐng)求出錯(cuò)的問(wèn)題
- 解決vue?cli3使用axios跨域問(wèn)題
相關(guān)文章
Vue3使用Signature Pad實(shí)現(xiàn)電子簽名功能
Vue3簽名板是一種在Vue3應(yīng)用中實(shí)現(xiàn)用戶簽名功能的組件,Vue3-signature-pad的實(shí)現(xiàn)旨在為開發(fā)者提供一個(gè)簡(jiǎn)單易用的工具,使用戶能夠在前端界面上進(jìn)行簽名操作,常見(jiàn)于電子商務(wù)、電子合同等場(chǎng)景,本文介紹了Vue3使用Signature Pad實(shí)現(xiàn)電子簽名功能,需要的朋友可以參考下2025-04-04
vue項(xiàng)目實(shí)現(xiàn)github在線預(yù)覽功能
這篇文章主要介紹了vue項(xiàng)目實(shí)現(xiàn)github在線預(yù)覽功能,本文通過(guò)提問(wèn)兩個(gè)問(wèn)題帶領(lǐng)大家一起學(xué)習(xí)整個(gè)過(guò)程,需要的朋友可以參考下2018-06-06
談?wù)勔騐ue.js引發(fā)關(guān)于getter和setter的思考
最近因?yàn)楣镜男马?xiàng)目決定使用Vue.js來(lái)做,但在使用的過(guò)程中發(fā)現(xiàn)了一個(gè)有趣的事情,因?yàn)榘l(fā)現(xiàn)的這個(gè)事情展開了一些對(duì)于getter和setter的思考,具體是什么下面通過(guò)這篇文章來(lái)一起看看吧,有需要的朋友們可以參考學(xué)習(xí)。2016-12-12
vue+Element-ui實(shí)現(xiàn)分頁(yè)效果
這篇文章主要為大家詳細(xì)介紹了vue+Element-ui實(shí)現(xiàn)分頁(yè)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11

