在nuxt框架的asyncData方法中使用cookie缓存数据

在nuxt框架的asyncData方法中使用cookie缓存数据


如果只想看代码可以戳目录的《完整代码》模块~

问题描述

asyncData是nuxt提供的一个方法,帮助我们在服务端时进行一些处理,支持异步接口调用,具体用法可戳官网:nuxt中文网对asyncData用法的介绍

例如常见的电商系统的商品详情为例,我们可能希望将获取商品详情接口的调用放在服务端处理,减少用户对于页面加载后loading的观感

但,我们又可能会涉及到,获取接口时将存在缓存中的信息作为参数传给后台的情况,不管这个数据是使用localstorage还是cookie,大家要知道,在页面还在服务端的情况下,我们是没办法直接使用localStorage.getItemdocument.cookie的,这时就需要用到asyncData方法中传递的参数了

参数中可以获取cookie数据,获取不了localstorage,所以建议大家如果需要在asyncData中使用缓存数据,就使用cookie储存




解决思路

例如我们在网页其他位置填入了cookie

document.cookie = 'name=DeerSilver'

首先,我们需要从页面的asyncData方法传递的参数中获取到cookie

export default {
	asyncData ({ req }) {
		// 这时会输出字符串name=DeerSilver
		console.log(req.cookie)
	}
}

但是! 如果使用req.cookie只能是页面还在服务端时才能获取到数据,如果当前页面是单页面跳转的,这时req就是undefined,所以我们需要进行一次判断,如果为空,就直接取document.cookie


然后我们需要写一个公用方法将获取到的字符串处理一下,但是下述代码没有进行stringCookie的判断处理,所以还需改良

/*
	@cookieName 需要取出的key
	@stringCookie cookie字符串
*/ 
function getCookie (cookieName, stringCookie) {
  let strCookie = new RegExp('' + cookieName + '[^;]+').exec(stringCookie)[0]
  return unescape(strCookie ? strCookie.toString().replace(/^[^=]+./, '') : '')
}

整体改良后如下:

完整代码

/*
	获取cookie内的数据
	@cookieName 需要取出数据的key
	@stringCookie cookie字符串
*/
function getCookie (cookieName, stringCookie) {
   let strCookie = ''
   try {
     strCookie = new RegExp('' + cookieName + '[^;]+').exec(stringCookie)[0]
   } catch (e) { }
   return unescape(strCookie ? strCookie.toString().replace(/^[^=]+./, '') : '')
}

export default {
	async asyncData ({ req }) {
	   let cookies = req ? req.headers.cookie : document.cookie
	    // 'name'为具体key,这里只是举例
	    let value = getCookie('name', cookies)
		// 使用async await搭配请求异步数据
		let res = await xxx
		return {
			// 这里将处理后的数据合并给data
			// 或直接将从cookie获取到的内容给data
			userName: value
		}
	}
}
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值