nuxt.js 多用户同时请求中遇到的问题

新手上路,请多包涵

问题描述

我准备在middleware中获取存储在cookie中的token参数
本地测试时没有发现问题,
但上传到正式服务器一段时间后发现有些用户出现了token相同的情况

检查后发现是因为多个用户在同时请求了服务器,触发的middleware可能被重写了(不清楚应该怎么描述)

问题出现的环境背景及自己尝试过哪些方法

当多个用户同时请求时页面时,
middleware 中的 context.req.headers.cookie字段的值是相同的

最开始以为是自己保存的临时变量被服务器重复查询,删除后发现问题依旧

相关代码

let getCookie = (cname, cookie) => {
  let name = cname + "=";
  let ca = cookie.split(';');
  let cname_index = cookie.indexOf(name)
  if (cname_index >= 0) {
    for (let i = 0; i < ca.length; i++) {
      let c = ca[i].trim();
      if (c.indexOf(name) == 0) return c.substring(name.length, c.length);
    }
  } else {
    return null;
  }
}

export default (context) => {
  if (context.route.name) {
    context.marsToken = getCookie("MarsToken", process.server ? (context.req.headers.cookie || "") : (document.cookie || ""));
    context.store.commit("SAVETOKEN", context.marsToken);
  }
}

你期待的结果是什么?实际看到的错误信息又是什么?

想问一下为什么会出现这种情况,是因为node无法处理并发请求,如果能,我应该怎么改进?
还是说框架的问题?

阅读 2.7k
2 个回答
新手上路,请多包涵

我也出现了相同的问题, 尤其是用 location.href 跳转的时候,store 中的 Token 就跟别人混了,我们业务又涉及到了切换域名,不得不跳,所以特别坑。 据我观察一旦使用了 locatio.href ,那么 nuxtServerInit 会再次初始化一遍,可能就是这个问题导致的。
如果域名相同,尽量用 nuxt-link 去做跳转,如果跳二级域名的话,实在不行在二级域名的首页从 cookie 里面取一下 token,重新设置到store 中。

新手上路,请多包涵

楼主大大,这个问题解决了吗,我也遇到这个问题了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题