Axios 拦截器始终解析承诺
2020-02-17
2766
我试图在 vue 中拦截 axios 后调用。
首先,我在 axios.js 中创建 Axios
import Vue from 'vue'
import axios from 'axios'
const axiosInstance = axios.create({
baseURL: `http://localhost:8081/` // the url of our server
})
Vue.prototype.$axios = axiosInstance
export { axiosInstance }
在这里您可以看到 axios 调用和拦截器
import { axiosInstance } from '../boot/axios'
export default {
validateUsers: async (username, password) => {
// var usersPromise = axiosInstance.post('/users', {
axiosInstance.post('/users', {
params: {
name: username,
password: password
}
})
axiosInstance.interceptors.response.use((response) => {
console.log('RESPONSE', response)
if (response.status === 401) {
console.log('You are not authorized')
return Promise.reject(response)
} else if (response.status === 200) {
console.log('response SUCC')
return response
}
}, (error) => {
console.log('ERROR RECEIVED BY AXIOS', error.response)
if (error.response && error.response.status === 401) {
return Promise.reject(error.response.status)
}
console.log('ERR RES', error.message)
return Promise.reject(error.message)
})
}
}
在我的 Vue 组件中,我像这样检查承诺
usersAPI.validateUsers(username, password)
.then(ok => {
console.log('ok', ok)
this.valForm(this.$refs.loginForm)
}, (error) => {
if (error === 401) {
this.getMessage('error', 'User or password wrong')
return error
}
this.getMessage('error', 'Something went wrong. Error: ' + error)
return error
})
在我的 nodeJS 代码中,如果用户登录不正确,我将返回 401,我可以看到 CORS 首先发送一个返回 204 的 OPTION 调用,然后我发送 401(这是正确的)。
我的期望
Axios 拦截器处理 401 错误并拒绝承诺
发生了什么
validateUsers()
函数返回“ok”(承诺已解决)而不是被 axios 拒绝。
为什么 Axios 不处理 401 错误?
1个回答
我认为您应该等待您的 axios 调用并返回承诺以使您的代码正常工作。
import Vue from 'vue'
import axios from 'axios'
const axiosInstance = axios.create({
baseURL: `http://localhost:8081/` // the url of our server
})
axiosInstance.interceptors.response.use((response) => {
console.log('RESPONSE', response)
if (response.status === 401) {
console.log('You are not authorized')
return Promise.reject(response)
} else if (response.status === 200) {
console.log('response SUCC')
return response
}
}, (error) => {
console.log('ERROR RECEIVED BY AXIOS', error.response)
if (error.response && error.response.status === 401) {
return Promise.reject(error.response.status)
}
console.log('ERR RES', error.message)
return Promise.reject(error.message)
})
Vue.prototype.$axios = axiosInstance
export { axiosInstance }
import { axiosInstance } from '../boot/axios'
export default {
validateUsers: async (username, password) => {
return axiosInstance.post('/users', {
params: {
name: username,
password: password
}
})
}
}
并且在您的 Vue 组件中,承诺应该被正确解决或拒绝。
usersAPI.validateUsers(username, password)
.then(ok => {
console.log('ok', ok)
this.valForm(this.$refs.loginForm)
}, (error) => {
if (error === 401) {
this.getMessage('error', 'User or password wrong')
return error
}
this.getMessage('error', 'Something went wrong. Error: ' + error)
return error
})
BTL
2020-02-17