pinia的各种示范
token:
store\user.js:
import { defineStore } from 'pinia'
export const useUserStore = defineStore('user',{
//变量名
state: () => ({
token: null,
email: null
}),
//方法
actions: {
setUser(email,token) {
this.token = token,
this.email = email
},
logout() {
this.token = null,
this.email = null,
localStorage.removeItem('email'),
localStorage.removeItem('token')
},
getToken() {
//如果没有token,尝试从localStorage中获取,如果token为字符串空值也从localStorage中获取
if(!this.token || this.token === 'null' || this.token === 'undefined') {
const token2 = localStorage.getItem('token')
//如果localstorage中也没有则返回null
if(!token2 || token2 === 'null' || token2 === 'undefined') {
this.token = null,
this.email = null,
//删除存储桶中的email和token
localStorage.removeItem('email'),
localStorage.removeItem('token')
} else {
this.token = localStorage.getItem('token'),
this.email = localStorage.getItem('email')
}
}
return this.token
}
}
})
main.js:
import { createApp } from 'vue'
import App from './App.vue'
import axios from 'axios'
import { createPinia } from 'pinia'
const app = createApp(App)
app.use(createPinia()) //启用全局状态管理
//导入pinia组件必须在app挂载pinia之后
import { useUserStore } from './store/user'; //导入用户store
const user = useUserStore(); //获取用户store
//指定url前缀
axios.defaults.baseURL = "http://127.0.0.1:80"
// axios.defaults.headers.post['Content-Type'] = 'application/json'
axios.interceptors.request.use(
config => {
const token = user.getToken()
//如果存在token则将它加入请求头
if(token) {
config.headers.Authorization = `Bearer ${token}`
}
return config
},
error => {
return Promise.reject(error)
}
)
app.provide("axios",axios) //全局共享axios
app.mount('#app')