MEAN Node JS在许多请求中请求



我有一个适用于单个请求的 MEAN 应用程序,假设调用 /api/products?pid=500 .但我最近发现,在请求的"突发"(我使用帖子数据批量更新大约 50 个产品 = 50 个请求/api/products?pid=500 *** 550 个请求)时,req.body 有时会获得一个新的即将到来的请求的值。

前端应用程序在所选产品中拨打电话:

 ds.forEach((d, key) => {
        this.ApiCall.setData('products', { action: 'send-product', data: d })
            .subscribe((result) => {
                //we have results
            });
        });
    //setData makes a http.post().map

返回应用程序/平均值分析帖子,尝试合成代码:

router.route('/')
.post(function (req, response) {
    if(req.body.data){
        var obj = { id: req.body.data.product_id }
        if(req.body.data.linked_products){
            req.body.data.linked_products.forEach(function(entry) {
                obj.linked = entry; //more ifs
            });
        }
        var async = require('async');
        async.series({
            q2: function(cb){
                queryProducts.findOne({id: req.body.data.product_id, null).exec(cb);
            },
            q3: function(cb){
                queryCategories.findOne({id: req.body.data.category_id, null).exec(cb);
            }
          }, function(err, qResults){
            var alreadysent = false;
            if (qResults.q3) qResults.q3.logs.forEach(function(entry) {
                if(entry.sent){
                    alreadysent = true;
                }
            });
            //more ifs
            qResults.q3.external_codes.forEach(function(entry) {
                obj.external_code = entry;//more ifs
            });
            if(req.body.data.price < 0){
                response.json({message: "Negative price didn't sent"});
                return;
            }
            if(qResults.q2.status=="inactive"){
                response.json({message: "Inactive didn't sent"});
                return;
            }
            req.body.data.campaigns(function(entry) {
                obj.price_offers = entry;//more ifs
            });
            //more ifs and foreach similar
            queryProducts.update({id: req.body.data.id}, {$push: { synced_products: obj }}, function (err, result) {
                //HERE I found req.body.data with values of a future request
                if(!err)
                    response.json({message: "Sent"});
                return;
            });
        });
    }
});
module.exports = router;

我了解提出请求

/api/products?pid=500
/api/products?pid=501
/api/products?pid=502
/api/products?pid=503
...

具有不同的时间,但是调用最后一个 req.body 的请求 (pid=501) 怎么可能具有新 req 的 req.body 的值 (pid=503)?有什么想法可以避免吗?将异步放在帖子之后的前面或制作

var reqbody = req.body 

谢谢!

我相信

这是由于async模块初始化。 引用节点文档:

缓存

模块在首次加载后缓存。这意味着(除其他事项外)每次调用require('foo')将返回完全相同的对象,如果它将解析为相同的文件。

多次调用require('foo')可能不会导致模块代码多次执行。这是一个重要的功能。有了它,可以返回"部分完成"的对象,从而允许加载传递依赖项,即使它们会导致循环。

若要让模块多次执行代码,请导出一个函数,然后调用该函数。

当请求突发导致重叠执行时,您将"同时"修改async变量的两次(或更多次)使用。 我建议使用某种互斥锁来控制对async变量的访问。