Nuxt.js 是一个基于 Vue.js 的通用应用框架,它提供了许多开箱即用的功能,包括对 Axios 的内置支持。Axios 是一个流行的 HTTP 客户端,用于浏览器和 node.js 中进行 HTTP 请求。在 Nuxt.js 中封装 Axios 可以提高代码的可维护性和复用性。
Nuxt.js: 一个用于构建服务端渲染(SSR)Vue.js 应用的框架。 Axios: 一个基于 Promise 的 HTTP 客户端,适用于浏览器和 node.js。
以下是一个简单的 Nuxt.js 中 Axios 封装的例子:
// plugins/axios.js
import axios from 'axios';
export default function ({ $axios, redirect }) {
// 请求拦截器
$axios.onRequest(config => {
console.log('Making request to ' + config.url);
// 可以在这里添加 token 等
config.headers.common['Authorization'] = 'Bearer ' + localStorage.getItem('token');
});
// 响应拦截器
$axios.onResponse(response => {
console.log('Response:', response);
return response;
});
// 错误拦截器
$axios.onError(error => {
const code = parseInt(error.response && error.response.status);
if (code === 404) {
redirect('/404');
}
return Promise.reject(error);
});
}
然后在 nuxt.config.js
中注册这个插件:
export default {
plugins: [
'~/plugins/axios.js'
]
}
问题: 请求超时或失败,没有正确处理错误。
原因: 可能是没有设置合适的超时时间,或者错误处理逻辑不完善。
解决方法: 设置合理的超时时间,并在错误拦截器中添加详细的错误处理逻辑。
$axios.defaults.timeout = 5000; // 设置超时时间为5秒
$axios.onError(error => {
if (error.response) {
// 请求已发出,但服务器响应的状态码不在 2xx 范围内
console.log(error.response.data);
console.log(error.response.status);
console.log(error.response.headers);
} else if (error.request) {
// 请求已发出,但没有收到响应
console.log(error.request);
} else {
// 在设置请求时触发了错误
console.log('Error', error.message);
}
console.log(error.config);
return Promise.reject(error);
});
通过这样的封装,可以确保你的应用在处理 HTTP 请求时更加健壮和可靠。
领取专属 10元无门槛券
手把手带您无忧上云