- 51
- 0
有个node express下的项目,在处理每次前端请求的时候都有一段验证代码,用来验证请求合法性,如下,我们引入了jwtFilter 对jwt进行验证:var self = { init: function (options) { self.o = options || {}; self.add(jwtFilter).add(xssFilter) return self.run; }, add: function (fn) { self.filterList.push(fn); return self; }, runNext: function (o, req, res) { if (self.o.next && self.o.currentFunction < self.filterList.length) { self.filterList[self.o.currentFunction](o, req, res, function(){ self.o.currentFunction++; if (!!res.err && !!res.err["309"]) { self.o.doNext = false; } self.runNext(self.o, req, res); }); } else { self.complete(); } }, run: function (req, res, next) { self.o.req = req, self.o.res = res, self.o.next = next, self.o.doNext = true, self.o.currentFunction = 0; if (self.o.next && self.o.currentFunction < self.filterList.length) { self.runNext(self.o, req, res); } }, complete: function () { if (self.o.doNext) self.o.next(); }, o: { req: {}, res: {}, next: {}, doNext: true, currentFunction: 0 }, filterList: [],};module.exports = self.init;jwtFilter.js 部分代码如下,其中getLoginiat是异步函数用来从redis读取一个时间:module.exports = async (op, req, res, callback)=> { let jwtObj; var o = op || {}; // if not login url, jwt always required if(req.url !== `/${app_name}/login/authenticate` && req.url !== `/${app_name}/login/authenticateForClient`) { try { jwtObj = jwtUtil.jwtVerify(req.cookies[jwt_name]); } catch (e) { responseHandler(res, {code: 308}, null); } if (jwtObj && jwtObj.dbUrl) { let login_iat = await getLoginiat(jwtObj.uGuid); if (jwtObj.iat != login_iat) { res.err[309] = codeMapping[309]; responseHandler(res, {code: 309}, null); callback(); } callback(); }else{ res.err[301] = codeMapping[301]; responseHandler(res, {code: 301}, null); callback(); } } else { callback(); }}function getLoginiat(uguid) { return redisClient.get(uguid).then(function (result) { return result; });}前端通过axios发起如下两个request,第一个请求在执行到await getLoginiat(jwtObj.uGuid)之后会返回主程序 runNext来执行第二个request(/syncUsers),这是没有问题的,await会主动让出线程,主程序执行完之后会继续执行await后面的代码。Promise.all([this.axios.post(`/getRoleFromUserGuid`, { "uGuid": userGuid}), this.axios.get('/login/syncUsers')]);现在有个问题是这样执行之后,/syncUsers总是返回404错误,感觉是在第一个request /getRoleFromUserGuid 执行到await getLoginiat(jwtObj.uGuid)的时候跳出来执行/syncUsers,之后又分别执行await后续的代码,导致了这个问题,试过单独执行一个request是可以正常返回结果的Promise.all([this.axios.post(`/getRoleFromUserGuid`, {"uGuid": userGuid})]);或Promise.all([this.axios.post(this.axios.get('/login/syncUsers')]);都可以正常返回结果。。有没有遇到过类似问题的小伙伴
0
打赏
收藏
点击回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

