购物车需求
问题:发请求的时候,获取不到你购物车里面数据,因为服务器不知道你是谁?
-
uuid临时游客身份 ==> 创建一个
utils
文件夹用来存放一些功能性代码 -
在小仓库中调用 生成 uuid的函数,且这个函数返回的uuid永远是同一个
-
因为detail.js中添加购物车的请求api方法,服务器只要求传送两个参数,需要将uuid 通过请求头 Header 带给服务器,所以在请求拦截器中拿到uuid,「引入 store仓库,因为store是默认暴露了各个小仓库,可以直接使用」
Vue 通过 axios请求拦截器 为 Headers 添加 参数 uuid不成功
//请求拦截器:在发请求之前,请求拦截器可以检测到,可以在请求发出去之 前做一些事情
requests.interceptors.response.use((config) => {
//config: 配置对象,对象里面有一个属性很重要,header请求头
if (store.state.detail.uuid_token) {
//请求头添加一个字段(userTempId):和后台老师商量好了
config.headers.userTempId = store.state.detail.uuid_token;
}
// nprogress进度条开始
nprogress.start()
return config;
}, (error) => {
// 对请求错误做些什么
return Promise.reject(error);
});
原因是 requests.interceptors.request.use((config) => {}) 而不是 requests.interceptors.response.use((config) => {})
request和response的主要区别是
request 获得用户的请求,比如你将一个字符串发送到服务器就用Request对象的方法接收。
response 是响应 对象的请求, 对客户端发出的请求作出动态的响应,向客户端发送数据当服务器处理完你的请求信息后,将处理结果发回客户端。
requests.interceptors.request.use((config) => {
//config: 配置对象,对象里面有一个属性很重要,header请求头
if (store.state.detail.uuid_token) {
//请求头添加一个字段(userTempId):和后台老师商量好了
config.headers.userTempId = store.state.detail.uuid_token;
}
// nprogress进度条开始
nprogress.start()
return config;
}, (error) => {
// 对请求错误做些什么
return Promise.reject(error);
});
完整代码:
<!--1. utils/uuid_token.js-->
// 起别名的引入方式
import {v4 as uuidv4} from 'uuid'
//随机字符串,且每次执行不能发生变化,游各身份持久存储
export const getUUID=()=>{
//先从本地存储获职uuid (看一下本地存储里面是否有)
let uuid_token = localStorage.getItem('UUIDTOKEN');
//如果没有
if(!uuid_token){
//我生成游客临时身份
uuid_token = uuidv4();
//本地存储存储一次
localStorage.setItem('UUIDTOKEN',uuid_token);
}
}
<!--2. store/detail.js-->
// 封装游客身份模块uuid--->生成一个随机字符串(不能在变了)
import {getUUID} from '@/utils/uuid_token'
const state={
goodInfo:{}
// 游客临时身份
uuid_token:getUUID()
}
const mutations={
GOODINFO(state,goodInfo){
state.goodInfo=goodInfo
}
}
const actions={
async goodInfo({commit},skuId){
let result=await reqGoodInfo(skuId)
if(result.code==200){
commit('GOOINFO',result.data)
}
}
}
const getters={}
<!--3. 通过ajax.js 将 uuid发送给服务器-->
import axios from 'axios';
// 引入进度条插件
// start: 进度条开始
// done:进度条接收
import nprogress from 'nprogress';
// 引入nprogress进度条的样式
import 'nprogress/nprogress.css';
// 引入 store 的仓库
import store from '@/store'
//1: 利用axios对象的方法create, 去创建一个axios实例
//2: request就是axios,只不过稍微配置一下
let requests = axios.create({
//配置对 象
//基础路径,发请求的时候,路径当中会出现api
baseURL: "/api",
//代表请求超时的时间5S
timeout: 5000,
});
//请求拦截器:在发请求之前,请求拦截器可以检测到,可以在请求发出去之 前做一些事情
requests.interceptors.request.use((config) => {
//config: 配置对象,对象里面有一个属性很重要,header请求头
if (store.state.detail.uuid_token) {
//请求头添加一个字段(userTempId):和后台老师商量好 了
config.headers.userTempId = store.state.detail.uuid_token
}
// nprogress进度条开始
nprogress.start()
return config;
}, (error)=> {
// 对请求错误做些什么
return Promise.reject(error);
});
// 响应拦截器
requests.interceptors.response.use((res) => {
//成功的回调函数:服务器相座数据回来以后,响应截器可以橙測到,可以做一些事情
// nprogress进度条结束
nprogress.done();
return res.data;
}, (error) => {
//响应失败的回调函数
return Promise.reject(error);
})
// 对外暴露
export default requests;
原文地址:https://blog.csdn.net/d295968572/article/details/124154380
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_51013.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!