来自 API 的 2 个并发请求数据被混淆
2 concurrent requests data from API were mixed up
我使用 Nodejs 作为我的应用程序 API 的后端,但我意识到当有 2 个不同的用户继续使用相同的方法请求时,MySQL 请求返回的数据有时可能会混淆,这是我的代码:
router.get('/v1/getList', function(req, res) {
model.getList(loginUser, function(groups){
if(!groups.length){
res.json({data: '', success: false, message: 'No record found.'});
} else{
console.log("User:"+loginUser+", Length:"+groups.length);
res.json({data: groups, success: true, message: ''});
}
});
});
loginUser
是用户 ID。在正常情况下,终端输出将如下所示,用户 1 有 2 个项目,用户 2 有 3 个项目:
User:1, Length:2
User:2, Length:3
User:1, Length:2
User:2, Length:3
and so on...
但是一旦我不断刷新屏幕,终端可能会返回:
User:1, Length:2
User:2, Length:3
User:1, Length:3
User:2, Length:2
我怀疑用户 2 的数据请求正在被用户 1 访问,反之亦然,我可以知道如何解决这个问题吗?
不能使用全局变量来存储中间件中的loginUser
。 可以同时有多个请求在传输中。 像这样的全局混合了来自多个请求的数据。
解决此问题的常用方法是将数据存储在中间件中的request
对象本身中。 然后,您可以从实际请求处理程序访问 request
对象上的该属性。 由于请求对象对于此特定请求是唯一的,因此来自不同用户的请求之间没有数据交叉耦合。
您的请求处理程序变为以下内容(使用 req.loginUser
):
router.get('/v1/getList', function(req, res) {
model.getList(req.loginUser, function(groups){
if(!groups.length){
res.json({data: '', success: false, message: 'No record found.'});
} else{
console.log("User:"+loginUser+", Length:"+groups.length);
res.json({data: groups, success: true, message: ''});
}
});
});
而且,您必须修改中间件以设置req.loginUser
而不是全局变量。
相关文章:
- 正在传递JSONP标头's数据参数到另一个文件中的AJAX请求
- node.js请求数据事件未在CORS ajax调用中触发
- Ajax请求返回空的数据字符串,但首先得到了正确的数据
- Javascript-如何让脚本与Ajax请求的数据一起运行
- ajax请求成功,但可以'我看不到我的数据
- 一台特定计算机的Ajax请求数据未定义/失败
- 如何在具有某些 UI 视图的状态中管理工厂单个请求数据
- 可以't从AJAX请求中筛选数据
- $.每个jquery循环打印一个“;未定义的“;对于getJSON请求后的每个元素,网格数据都会完美地打印出来
- 在检索数据时是否可以停止图像加载请求
- 尝试发布大型JSON数据时出现错误请求错误
- 首次加载 json 数据请求并在主页中显示相同的数据
- 当有多个 React.js 组件实例具有数据请求时如何处理缓存
- 转换HTML画布内容,在laravel后端向其发送角度形式的数据请求
- 如何用ajax发送multipart/form数据请求
- jQuery regex数据请求错误
- Angular-多个$http.get数据请求
- 向余烬数据请求追加参数
- 数据请求有时是异步的
- 通过AJAX检索PHP JSON数据-正确的数据请求结构