使用 Node.js 测试网址
Testing URLs with Node.js
>假设我有一个 URL 数组,并且我想确保每个 URL 都正常工作,我创建了以下代码。 但是,仅测试数组中的最后一个 URL。 如何确保每个 url 返回 200 响应代码? 需要明确的是,这些都是我正在测试的远程地址,它们指向大小适中的 PDF。
根据@lukas.pukenis的回应进行了更新。 结果相似,实际上只检查了几个文件。
function check(l) {
console.log(l);
http.get(l, function(res) {
if (res.statusCode != 200) {
console.log(res.statusCode + ' on '+l);
} else {
console.log('success on ' + l);
}
});
}
for (link in fileLinks) {
check(fileLinks[link]);
}
此代码输出:
http://somesite.com/somefile1.pdf
http://somesite.com/somefile2.pdf
http://somesite.com/somefile3.pdf
...
all the rest of them
...
http://somesite.com/somefile99.pdf
success on http://somesite.com/somefile1.pdf
success on http://somesite.com/somefile2.pdf
404 on http://somesite.com/somefile5.pdf
success on http://somesite.com/somefile7.pdf
这是因为您的循环每次都用 var l = fileLinks[link];
重写 l 变量
所以 l 的值是数组的最后一个值。为了保留唯一的l值,您需要将其存储在某个地方。更好 - 功能。喜欢这个:
function check(l) {
var req = http.get(l, function(res) {
if (res.statusCode != 200) {
console.log(res.statusCode + ' on '+l);
} else {
console.log('success on ' + l);
}
}
req.on('close', function() {
console.log('Request done');
});
for (link in fileLinks) {
var l = fileLinks[link];
check(l);
}
在这里,拥有函数不是魔法。它只是在每次函数调用的内存中保留本地值,因此每次需要 l 时都是唯一的。
for
表达式不应与数组一起使用。将 for
循环替换为如下所示的内容:
fileLinks.forEach(function(item){
check(item);
});
执行这么多传出请求时,您可能希望将maxSockets
增加到大于默认值 5 的值,否则可能会遇到意外行为。在require('http')
后执行此操作:
http.globalAgent.maxSockets = 150;
此外,当您将console.log
放在回调函数之外时,它不会在从服务器返回响应的同时显示。反正这是多余的。这是一个完整的工作示例:
var http = require('http');
var url = require('url');
function check(l) {
var u = url.parse(l);
var opts = {
host: u.host,
path: u.path,
agent: false // prevents pooling behavior
};
http.get(opts, function(res) {
if (res.statusCode != 200) {
console.log(res.statusCode + ' on '+l);
} else {
console.log('success on ' + l);
}
});
}
fileLinks = ['http://www.google.com','http://www.google.com'];
fileLinks.forEach(function(item){
check(item);
});
相关文章:
- 如何使用JS/nightwatchjs并行运行多个测试
- 构建JS测试,警报窗口重复上一个Q,而不是问下一个Q
- 如何在Mocha/Chai中测试JS原型(非模块)
- 使用Angular js-量角器e2e测试上传文件
- JS和three.JS,在浏览器中进行参数测试
- 使用JS/NodeJS测试并读取文件中的变量
- 在node.js中编写单元测试的最佳方式是什么
- node.js测试事件是否是在不使用超时的情况下使用sinon.js发出的
- 基准测试js的结果是什么意思
- 摩卡.测试几个测试.js
- 如何通过期望的测试.js异步完成()采取错误
- 在 Node 中进行回调测试.js生成匿名错误
- 如何在余烬中执行单元测试.js .
- 为什么我不能通过“;node-和谐测试.js”;从命令行
- 测试JS变量是否被设置为函数参数
- 黄瓜测试js.没有html时的动词功能.erb的存在
- 如何使用jasmine.js测试js函数的一部分?
- 如何使用字符串测试JS库是否已加载
- 如何最好地测试JS代码和与数据文件交互的效果
- Rails从控制器规范中测试JS视图