javascript - Node.js 请求数据损坏

标签 javascript node.js express

我是 Node.js 新手。

我正在通过 Node.js 从其他一些服务器获取数据:

function get_data(data_url, a, callback) {
    console.log('dataurl = ' + data_url);
    rem_url = url.parse(data_url);

    console.log('hostname = ' + rem_url.hostname);
    console.log('host = ' + rem_url.host);
    console.log('path = ' + rem_url.path);
    options = {
        hostname: rem_url.hostname,
        path: rem_url.path,
        keepAlive: true
    };

    request = http.request(options, function (res) {
        data = '';
        res.on('data', function (chunk) {
            data = data + chunk;
            sleep(20);
        });

        res.on('end', function () {
            callback(a, data);
        });

        res.on('error', function (err) {
            console.log("Error Occurred: " + err.message);
        });
    });

    request.on('error', function (e) {
        console.log('dataurl = ' + data_url);
        console.log('a = ' + a);
        console.log('problem with request: ' + e.message);
    });

    request.end();
}

我收到了损坏的数据,因此我插入了一个 sleep 函数:

res.on('data', function (chunk) {
    data = data + chunk;
    sleep(20);
});

我仍然想知道是否有更好的方法? 非常感谢!

注意:这是我的 sleep 功能:

function sleep(milliseconds) {
    var start = new Date().getTime();
    for (var i = 0; i < 1e7; i++) {
        if ((new Date().getTime() - start) > milliseconds){
            break;
        }
    }
}

更多详细信息:

  • 1 次请求的平均数据长度为 5000~5500 个字符
  • 我提出了 500 个请求
  • 因此总数据长度变为 2700285
  • 数据采用 Base64 编码
  • 没有 sleep 功能 %10 的数据已损坏
  • 随着 sleep(1) 损坏的数据减少到 %5
  • 随着 sleep(10) 损坏,数据减少至 %2
  • 随着 sleep(20),损坏的数据减少到 %1
  • 如果我增加 sleep 时间,我会得到更好的结果。

最佳答案

在阅读你的代码时,我注意到即使有相同的评论, 您需要在函数内部而不是外部设置数据。 所以它变成了局部变量。 在你的函数中数据变量是全局的。 因为使用 sleep() 函数可以获得更好的结果; javascript 需要一些时间来覆盖全局数据。这解释了为什么你会得到更好的结果。 只需像这样编写并从 js 文件的上行删除 var data; 即可。

var data = '';
res.on('data', function (chunk) {
       data = data + chunk;

});

关于javascript - Node.js 请求数据损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29960326/

相关文章:

node.js - 我可以在同一条路线上使用 2 个不同的功能吗? Node.js

javascript - 如何配置我的前端 JavaScript 应用程序?

javascript - Casper.js 等待 X 或 Y

node.js - 从 NodeJS 中的 keycloak session 获取用户名

javascript - html-minifier node.js TypeError : value. 替换不是函数

node.js - gulp.js - 如何将多个流返回到主流?

javascript - Node JS : Passing Response Object to Bull Queue for Server Side Events

javascript - 从表中删除行后动态 ID 不起作用

javascript - d3.js 树结构文本链接

node.js - 更好的方法将 scss 变量传播到每个 scss 文件