Javascript Node.js请求数据已损坏
我是Node.js的新手 我通过Node.js从其他服务器获取数据:Javascript Node.js请求数据已损坏,javascript,node.js,express,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);
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();
}
我得到了坏数据,所以我插入了睡眠功能:
res.on('data', function (chunk) {
data = data + chunk;
sleep(20);
});
我还在想是否有更好的办法?
多谢各位
注意:这是我的睡眠功能:
function sleep(milliseconds) {
var start = new Date().getTime();
for (var i = 0; i < 1e7; i++) {
if ((new Date().getTime() - start) > milliseconds){
break;
}
}
}
函数睡眠(毫秒){
var start=new Date().getTime();
对于(变量i=0;i<1e7;i++){
如果((新日期().getTime()-start)>毫秒){
打破
}
}
}
更多详情:
- 一个请求的平均数据长度为5000~5500个字符
- 我提出500个请求
- 因此,总数据长度变为2700285
- 数据是base64编码的
- 没有睡眠功能%10的数据被破坏
- 使用睡眠(1)时,中断的数据减少到%5
- 使用睡眠(10)时,中断的数据减少到%2
- 使用睡眠(20)时,中断的数据减少到%1
- 如果我增加睡眠时间,我会得到更好的结果李>
var数据代码>来自js文件的上面几行
var data = '';
res.on('data', function (chunk) {
data = data + chunk;
});
您正在使用data=''创建一个全局变量代码>。使用var data=''将其设置为本地代码>。与var请求
,var rem\u url
和var选项
相同。我已经做过了。但它超出了功能范围。这是完整的代码wat。对不起,在我看之前,你真的需要把它分解成更小的、命名良好的函数。应该有一个关于('success',…)
的事件?!你可以用它来代替('data',…)上的,
和('end',…)上的,
。你能解释更多吗。谢谢你,马塞尔