首页 >> js开发 >> js解决Nuxt使用axios跨域问题js大全
js解决Nuxt使用axios跨域问题js大全
发布时间: 2021年1月13日 | 浏览:
| 分类:js开发
Nuxt 是 Vue 项目服务器端渲染(SSR)解决方案。而在使用时,就会遇到前后端分离情况下的域名或端口不一致导致的跨域问题。本文将介绍如何通过设置代理解决 Nuxt 与 axios 集成的跨域问题。Nuxtaxios解决跨域解决跨域解决跨域Nuxt 使用 axios 为避免出现前端页面跨域问题,需要安装 @nuxtjs/axios 和 @nuxtjs/proxy 两个模块。用 yarn 安装:
yarn add axios @nuxtjs/axios @nuxtjs/proxy
yarn add axios @nuxtjs/axios @nuxtjs/proxy使用 npm 安装:
npm install axios @nuxtjs/axios @nuxtjs/proxy
npm install axios @nuxtjs/axios @nuxtjs/proxy注意:不需要手动注册 @nuxtjs/proxy 模块,但是必须要确保它在依赖项中。安装完成后在 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"]
}
}
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"]
}
}到此,代理设置完成,可以测试以下跨域问题是否解决。扩展 axios扩展 axios扩展 axios创建 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");
}
});
}
// 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"],
}
module.exports = {
/*
** Plugins to load before mounting the App
** https://nuxtjs.org/guide/plugins
*/
plugins: ["@/plugins/axios"],
}使用 axios 插件使用 axios 插件使用 axios 插件通过上面的设置后,使用 axios 插件需要注意的是在 asyncData 内和在 asyncData 外的使用是所不同的。** 在 asyncData 里使用:**
async asyncData({ $axios }) {
const ip = await $axios.get('http://icanhazip.com')
return { ip }
}
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
}
}
methods: {
async fetchSomething() {
const ip = await this.$axios.get('http://icanhazip.com')
this.ip = ip
}
}关于 Nuxt 与 axios 的集成介绍可以查看官方文档——Axios模块。Axios模块附录:nuxt使用axios的跨域处理配置附录:nuxt使用axios的跨域处理配置附录:nuxt使用axios的跨域处理配置
npm i axios qs
npm i @nuxtjs/axios @nuxtjs/proxy --save-dev
npm i axios qs
npm i @nuxtjs/axios @nuxtjs/proxy --save-dev plugins/axios.js使用qs将请求从参数转化位字符串
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);
});
}
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 },
],
//处理跨域问题
modules: ["@nuxtjs/axios", "@nuxtjs/proxy"],
axios: {
retry: { retries: 3 },
//开发模式下开启debug
debug: process.env._ENV == "production" ? false : true,
//设置不同环境的请求地址
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/": "" }
}
}
plugins: [
{ src: "~plugins/axios.js", ssr: true },
],
//处理跨域问题
modules: ["@nuxtjs/axios", "@nuxtjs/proxy"],
axios: {
retry: { retries: 3 },
//开发模式下开启debug
debug: process.env._ENV == "production" ? false : true,
//设置不同环境的请求地址
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/": "" }
}
}在页面使用使用this.$axios做请求
yarn add axios @nuxtjs/axios @nuxtjs/proxy
yarn add axios @nuxtjs/axios @nuxtjs/proxy使用 npm 安装:
npm install axios @nuxtjs/axios @nuxtjs/proxy
npm install axios @nuxtjs/axios @nuxtjs/proxy注意:不需要手动注册 @nuxtjs/proxy 模块,但是必须要确保它在依赖项中。安装完成后在 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"]
}
}
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"]
}
}到此,代理设置完成,可以测试以下跨域问题是否解决。扩展 axios扩展 axios扩展 axios创建 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");
}
});
}
// 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"],
}
module.exports = {
/*
** Plugins to load before mounting the App
** https://nuxtjs.org/guide/plugins
*/
plugins: ["@/plugins/axios"],
}使用 axios 插件使用 axios 插件使用 axios 插件通过上面的设置后,使用 axios 插件需要注意的是在 asyncData 内和在 asyncData 外的使用是所不同的。** 在 asyncData 里使用:**
async asyncData({ $axios }) {
const ip = await $axios.get('http://icanhazip.com')
return { ip }
}
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
}
}
methods: {
async fetchSomething() {
const ip = await this.$axios.get('http://icanhazip.com')
this.ip = ip
}
}关于 Nuxt 与 axios 的集成介绍可以查看官方文档——Axios模块。Axios模块附录:nuxt使用axios的跨域处理配置附录:nuxt使用axios的跨域处理配置附录:nuxt使用axios的跨域处理配置
npm i axios qs
npm i @nuxtjs/axios @nuxtjs/proxy --save-dev
npm i axios qs
npm i @nuxtjs/axios @nuxtjs/proxy --save-dev plugins/axios.js使用qs将请求从参数转化位字符串
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);
});
}
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 },
],
//处理跨域问题
modules: ["@nuxtjs/axios", "@nuxtjs/proxy"],
axios: {
retry: { retries: 3 },
//开发模式下开启debug
debug: process.env._ENV == "production" ? false : true,
//设置不同环境的请求地址
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/": "" }
}
}
plugins: [
{ src: "~plugins/axios.js", ssr: true },
],
//处理跨域问题
modules: ["@nuxtjs/axios", "@nuxtjs/proxy"],
axios: {
retry: { retries: 3 },
//开发模式下开启debug
debug: process.env._ENV == "production" ? false : true,
//设置不同环境的请求地址
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/": "" }
}
}在页面使用使用this.$axios做请求