首页 > 解决方案 > Nodejs的多个发布请求

问题描述

我对如何一个接一个地发出发布请求而不用尽服务器资源感到有些困惑。我正在尝试重新构建大量数据并将其一一发布到新的 Mongoose 数据库中,我正在使用 mac pro 服务网关。以下是我的一些代码:

http.get(option, (res) => {
        
        res.on('data', function (chunk) {
            str += chunk;
        });

        
        res.on('end', async function() {
             var data = [];
             
            data = await JSON.parse(str);
            *// code is sucessfully till here, all data is received and parse properly*    
            data.forEach(item => {
                    var newData = item;
                    // console.log(newData);
                    postData(dataCat, newData);
    
                // console.log(item);
            })
            // console.log(str);
            });


            
        str = "";
    });
function postData(dataCat, newData) {
        
    // option = 'http://localhost:3008/pbapi/' + dataCat;
    // console.log(newData);

    var post_options = {
        host: '192.168.1.155',
        port: '3008',
        path: '/pbapi/' + dataCat,
        method: 'POST',
        headers: {
            'Content-Type': 'application/JSON'
        }
    };

    var post_req = http.request(post_options, function(res) {
        res.setEncoding('utf8');
        res.on('end', function (chunk) {
            console.log('Response: ' + chunk);
        });
    });

    post_req.write(newData);
    post_req.end();

}

** postData() 针对单个 JSON 对象进行测试 forEach 循环仅在数据长度低于 2000 时有效(我只测试成功到 2000 年,在 2500 年失败)。

错误代码:'ENFILE' 如果我为 forEach 循环输入 2500 及以上

标签: node.jsforeach

解决方案


如果你想一个一个地提出请求,你应该把你的帖子包裹在 Promise 中,然后等待,完成后,再做下一个 Promise。

它称为承诺。你可以在这里阅读


推荐阅读