如何在全局范围内将 axios/axios 拦截器附加到 Nuxt?
How to attach axios / axios interceptor to Nuxt globally ?
我如何将 axios / axios 拦截器全局附加到 nuxt(因此它随处可用),与 i18n 的附加方式相同?
我的想法是我想要一个全局的 axios 拦截器,每个请求都通过该拦截器。
谢谢
创建一个新模块,例如命名为request.js。
import axios from 'axios'
const instance = axios.create({
baseURL: 'http://example.org' // if you have one
})
// Put all interceptors on this instance
instance.interceptors.response.use(r => r)
export default instance
然后只需在需要时导入该实例并像使用普通 axios 实例一样使用它:
import request from './request'
await request.get('/endpoint')
// or use promises
request.get('/endpoint').then(data => data)
如果您确实需要在全局范围内使用它,您可以在应用程序的入口点使用以下代码:
import request from './request'
global.request = request
// use it:
await request.get('example.org')
或者你可以将它添加到 vue 原型中
Vue.prototype.$request = request
// in your component:
this.$request.get()
不过我不建议这样做。
您可以创建一个名为 axios (/plugins/axios.js) 的插件
import Vue from 'vue';
import axios from 'axios';
axios.interceptors.request.use((config) => {
// Do something before request is sent
return config;
}, function (error) {
// Do something with request error
return Promise.reject(error);
});
Vue.use(axios);
然后在nuxt.config.js
中定义它
module.exports = {
//....
plugins: [
'~/plugins/axios',
],
//....
};
就是这样,您的拦截器现在可以在全球范围内工作了
也许会对某人有所帮助。
它只是为每个请求设置 lang 参数。
创建一个名为 axios (/plugins/axios.js) 的插件。放在那里:
export default function ({ $axios, app, redirect }) {
$axios.onRequest(config => {
config.params = config.params || {}; // get existing parameters
config.params['lang'] = app.i18n.locale;
})
$axios.onError(error => {
const code = parseInt(error.response && error.response.status)
if (code === 400) {
redirect('/400')
}
})
}
加入nuxt.config.js:
module.exports = {
plugins: [
'~/plugins/axios'
]
};
它隐藏在文档中 - https://nuxtjs.org/docs/2.x/directory-structure/plugins
查看第一张照片的编号 3:
// plugins/axios.js
export default function ({ $axios, redirect }) {
$axios.onError(error => {
if (error.response.status == 404) {
redirect('/sorry')
}
})
}
然后在nuxt.config.js
中定义它
module.exports = {
//....
plugins: [
'~/plugins/axios',
],
//....
};
我如何将 axios / axios 拦截器全局附加到 nuxt(因此它随处可用),与 i18n 的附加方式相同?
我的想法是我想要一个全局的 axios 拦截器,每个请求都通过该拦截器。
谢谢
创建一个新模块,例如命名为request.js。
import axios from 'axios'
const instance = axios.create({
baseURL: 'http://example.org' // if you have one
})
// Put all interceptors on this instance
instance.interceptors.response.use(r => r)
export default instance
然后只需在需要时导入该实例并像使用普通 axios 实例一样使用它:
import request from './request'
await request.get('/endpoint')
// or use promises
request.get('/endpoint').then(data => data)
如果您确实需要在全局范围内使用它,您可以在应用程序的入口点使用以下代码:
import request from './request'
global.request = request
// use it:
await request.get('example.org')
或者你可以将它添加到 vue 原型中
Vue.prototype.$request = request
// in your component:
this.$request.get()
不过我不建议这样做。
您可以创建一个名为 axios (/plugins/axios.js) 的插件
import Vue from 'vue';
import axios from 'axios';
axios.interceptors.request.use((config) => {
// Do something before request is sent
return config;
}, function (error) {
// Do something with request error
return Promise.reject(error);
});
Vue.use(axios);
然后在nuxt.config.js
中定义它module.exports = {
//....
plugins: [
'~/plugins/axios',
],
//....
};
就是这样,您的拦截器现在可以在全球范围内工作了
也许会对某人有所帮助。 它只是为每个请求设置 lang 参数。
创建一个名为 axios (/plugins/axios.js) 的插件。放在那里:
export default function ({ $axios, app, redirect }) {
$axios.onRequest(config => {
config.params = config.params || {}; // get existing parameters
config.params['lang'] = app.i18n.locale;
})
$axios.onError(error => {
const code = parseInt(error.response && error.response.status)
if (code === 400) {
redirect('/400')
}
})
}
加入nuxt.config.js:
module.exports = {
plugins: [
'~/plugins/axios'
]
};
它隐藏在文档中 - https://nuxtjs.org/docs/2.x/directory-structure/plugins
查看第一张照片的编号 3:
// plugins/axios.js
export default function ({ $axios, redirect }) {
$axios.onError(error => {
if (error.response.status == 404) {
redirect('/sorry')
}
})
}
然后在nuxt.config.js
中定义它module.exports = {
//....
plugins: [
'~/plugins/axios',
],
//....
};