解決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 模塊,但是必須要確保它在依賴(lài)項(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 }, //開(kāi)發(fā)模式下開(kāi)啟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: { //開(kāi)啟代理 "/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)文章
element中el-cascader級(jí)聯(lián)選擇器只有最后一級(jí)可以多選
本文主要介紹了element中el-cascader級(jí)聯(lián)選擇器只有最后一級(jí)可以多選,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-01-01vue使用echarts如何實(shí)現(xiàn)雙柱狀圖和雙y軸的柱狀圖
這篇文章主要介紹了vue使用echarts如何實(shí)現(xiàn)雙柱狀圖和雙y軸的柱狀圖問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10Vue.js中provide/inject實(shí)現(xiàn)響應(yīng)式數(shù)據(jù)更新的方法示例
這篇文章主要介紹了Vue.js中provide/inject實(shí)現(xiàn)響應(yīng)式數(shù)據(jù)更新,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10Vue?keepAlive實(shí)現(xiàn)不同的路由共用一個(gè)組件component的緩存問(wèn)題(推薦)
這篇文章主要介紹了Vue?keepAlive實(shí)現(xiàn)不同的路由共用一個(gè)組件component的緩存問(wèn)題,實(shí)現(xiàn)方式使用Vue?keepAlive實(shí)現(xiàn)頁(yè)面緩存,需要的朋友可以參考下2022-08-08vue+drf+第三方滑動(dòng)驗(yàn)證碼接入的實(shí)現(xiàn)
這篇文章要給大家介紹的是vue和drf以及第三方滑動(dòng)驗(yàn)證碼接入的實(shí)現(xiàn),下文小編講詳細(xì)講解該內(nèi)容,感興趣的小伙伴可以和小編一起來(lái)學(xué)習(xí)奧2021-10-10