const http = axios.create({ timeout: 1000 * 30, withCredentials: true, headers: { 'Content-Type': 'application/json; charset=utf-8' } }) //请求拦截器 http.interceptors.request.use( config => { var Authorization = localStorage.getItem("Authorization") // debugger // console.log("授权码是:" + Authorization) if (Authorization) { //判断token是否存在 config.headers['Authorization'] = Authorization; //将token设置成请求头 } return config; }, err => { return Promise.reject(err); } );
时间: 2024-02-14 11:21:07 浏览: 139
这段代码是使用axios创建了一个名为http的实例,并配置了一些属性,如超时时间(timeout)为30秒,开启跨域凭证(withCredentials),请求头中设置Content-Type为application/json; charset=utf-8。同时,还添加了一个请求拦截器,在发起请求前会检查本地存储中是否存在名为Authorization的授权码,如果存在则将其添加到请求头中的Authorization字段中。最后,使用Promise.reject()方法将错误信息返回。
相关问题
const http = axios.create({ timeout: 1000 * 86400, withCredentials: true, baseURL: '/star', headers: { 'Content-Type': 'application/json; charset=utf-8' } }) // 请求拦截 http.interceptors.request.use(config => { config.headers['Token'] = storage.get('Token') // 请求头带上token return config }, error => { return Promise.reject(error) }) // 响应拦截 http.interceptors.response.use(response => { if (response.data && response.data.code === 401) { // 401, token失效 router.push({ name: 'login' }) } return response }, error => { return Promise.reject(error) }) export default http
这是一个使用 axios 封装的 HTTP 请求实例,包括请求拦截和响应拦截。具体实现如下:
1. 创建一个名为 http 的 axios 实例,设置基础 URL、超时时间、跨域请求时是否需要凭证等参数。
```javascript
const http = axios.create({
timeout: 1000 * 86400, // 请求超时时间
withCredentials: true, // 跨域请求时是否需要使用凭证
baseURL: '/star', // 基础URL
headers: {
'Content-Type': 'application/json; charset=utf-8' // 请求头配置
}
})
```
2. 添加请求拦截器,当发起请求时,在请求头中添加 token,以便后端验证用户身份。
```javascript
http.interceptors.request.use(config => {
config.headers['Token'] = storage.get('Token') // 在请求头中添加 Token
return config
}, error => {
return Promise.reject(error)
})
```
3. 添加响应拦截器,当后端返回 401 状态码时,表示用户身份验证失败,此时跳转到登录页。
```javascript
http.interceptors.response.use(response => {
if (response.data && response.data.code === 401) { // 后端返回 401 状态码
router.push({ name: 'login' }) // 跳转到登录页
}
return response
}, error => {
return Promise.reject(error)
})
```
4. 导出 http 实例,供其他组件调用。
```javascript
export default http
```
这样封装后,我们在项目中可以直接使用 http 实例进行 API 请求,并自动携带 token,同时也可以处理后端返回的 401 状态码。
import axios from 'axios'const instance = axios.create({ baseURL: 'http://localhost:3000', // 请求的基础 URL timeout: 5000, // 超时时间 headers: { 'Content-Type': 'multipart/form-data' } // 设置请求头})// 文件上传方法export function uploadFile (file, params) { const formData = new FormData() formData.append('file', file) for (let key in params) { formData.append(key, params[key]) } return instance.post('/upload', formData)}// 实例化 axios 对象的方法export function createAxios () { return instance}怎么在前端用
在前端使用时,需要先在页面中引入该文件,然后通过调用`uploadFile`方法来实现文件上传操作。例如:
```javascript
import { uploadFile } from './api.js'
// 获取上传文件的 DOM 元素
const fileInput = document.getElementById('file')
// 给上传文件的 DOM 元素添加事件监听器
fileInput.addEventListener('change', async () => {
const file = fileInput.files[0]
const params = { // 可选的其他参数
name: 'example',
type: 'image'
}
try {
const response = await uploadFile(file, params)
console.log(response.data) // 输出上传成功后的响应数据
} catch (error) {
console.log(error) // 输出上传失败后的错误信息
}
})
```
这里我们首先通过`getElementById`方法获取上传文件的 DOM 元素,然后给它添加了一个`change`事件监听器。当用户选择了一个文件后,我们就可以获取到这个文件对象并调用`uploadFile`方法来上传文件。如果上传成功,就会输出响应数据;如果上传失败,就会输出错误信息。
阅读全文