引入封装axios

This commit is contained in:
Qi 2025-03-26 17:38:40 +08:00
parent 853567e4f8
commit ff3d02d3b8
6 changed files with 136 additions and 10 deletions

30
src/api/auth.js Normal file
View File

@ -0,0 +1,30 @@
/**
*axios封装使用实例
*
*/
import request from '@/utils/request'
// 对应request.js export default request 可更改默认的baseURL
// const api = request.create({ baseURL: 'http://localhost:8081' })
// **全局唯一 Axios 实例**
// 对应request.js export default (params) => Factory(params)
// const api = request({ baseURL: 'http://localhost:8080' })
// 示例请求
// export function login (params) {
// return request({
// url: '/auth/login',
// method: 'post',
// data: params
// })
// }
// 示例请求
// export const login = (params) => api.post('/auth/login', params)
// export const login = (params) => request.post('/auth/login', params)
// 用户登入
export const login = (params) => request.post('/auth/login', params)
// 用户注册
export const register = (params) => request.post('/auth/register', params)

10
src/api/user.js Normal file
View File

@ -0,0 +1,10 @@
import request from '@/utils/request'
// 示例请求
export function getUserInfo () {
return request({
url: '/user/info',
method: 'get'
})
}
export const login = (userData) => request.post('/users', userData)

View File

@ -4,9 +4,6 @@ import 'element-plus/dist/index.css'
import App from './App.vue' import App from './App.vue'
import router from './router' import router from './router'
import store from './store' import store from './store'
import axios from 'axios'
axios.defaults.baseURL = 'http://localhost:8080'
const app = createApp(App) const app = createApp(App)
app.use(store) app.use(store)

74
src/utils/request.js Normal file
View File

@ -0,0 +1,74 @@
/**
*axios封装实例
*/
// 第一步我们先引入axios模块
import axios from 'axios'
// 这里的话有token的需求我们可以获取一下token方便我们进行请求的时候使用
function getToken () {
// 这里可以根据你项目具体来获取
const token = window.sessionStorage.getItem('token')
return token || ''
}
// 第二步我们创建一个axios实例对象,然后用函数Factory封装一下
function Factory ({ baseURL, code, msg, callFail }) {
const $http = axios.create({
baseURL,
timeout: 1000 * 60 * 5 // 超时时间
})
// 请求拦截器,我们可以在请求拦截器中设置token,或者对请求进行一些处理
$http.interceptors.request.use(
(config) => {
// 这里我们可以设置token
const token = getToken()
if (token) {
config.headers.Authorization = token
}
return {
headers: {
// 这里我们还可以设置请求头
'Content-Type': 'application/json;charset=UTF-8'
// ......
},
...config,
validateStatus: (status) => {
// 这里我们设置状态码的判断条件如果返回的状态码在200到300之间就表示请求成功否则就是失败
return (status >= 200 && status < 300) || status === 401
}
}
},
(error) => {
// 这里我们处理请求错误
return Promise.reject(error)
}
)
// 响应拦截器,我们可以在响应拦截器中返回的数据或者错误信息进行处理
$http.interceptors.response.use((response) => {
// 这里我们处理响应数据
const data = response.data
if (+data.code === 200 || +data.code === 0) {
return data
} else if (+data.code === 401) {
console.error('请求报错提示token失效请重新登录')
} else {
console.error('请求报错提示:', data, msg || '请求失败')
}
return Promise.reject(data.msg || '请求失败')
},
error => {
// 这里我们处理响应错误
console.error('请求报错提示:', error, msg || '请求失败')
return Promise.reject(error)
})
return $http
}
// 默认导出一个 `request` 方法,同时支持创建 `api` 实例
const request = Factory({ baseURL: 'http://localhost:8080' })
// 第三步我们导出axios实例对象
export default request
// export default (params) => Factory(params)() // 不理解
// export default (params) => Factory(params) // 为什么上面的不能用

View File

@ -63,6 +63,7 @@
</template> </template>
<script> <script>
import { login } from '@/api/auth'
export default { export default {
name: 'LoginPage', name: 'LoginPage',
data () { data () {
@ -86,17 +87,31 @@ export default {
} }
}, },
methods: { methods: {
handleLogin () { async handleLogin () {
// const params = {
// userName: this.loginForm.username,
// password: this.loginForm.password
// }
if (this.loading) return if (this.loading) return
this.$refs.loginForm.validate((valid) => { this.$refs.loginForm.validate(async (valid) => {
if (valid) { if (valid) {
this.loading = true this.loading = true
console.log('登录信息:', this.loginForm) console.log('登录信息:', this.loginForm)
// try {
setTimeout(() => { // this.loginForm
const response = await login(this.loginForm)
if (response.code === 200) {
this.$message.success('登录成功')
// token
} else {
this.$message.error(response.msg || '登录失败')
}
} catch (error) {
this.$message.error(error.message || '请求失败')
} finally {
this.loading = false this.loading = false
this.$message.success('登录成功') }
}, 2000)
} else { } else {
return false return false
} }

View File

@ -8,4 +8,4 @@ module.exports = {
host: 'localhost', // 可选:设置为 '0.0.0.0' 后台访问 host: 'localhost', // 可选:设置为 '0.0.0.0' 后台访问
open: true // 自动打开浏览器 open: true // 自动打开浏览器
} }
}; }