获取" TypeError:对象不是函数"在forEach循环中使用supertest / superagent时

时间:2015-03-04 13:04:30

标签: javascript node.js supertest superagent

我使用supertest按照相同的规则测试一组网址。

var urls = [
    "https://www.example.com",
    "https://www.example2.com"
];

urls.forEach(function (url) {
    console.log('begin');
    request = request(url)
        .get('')
        .expect(200)
        .end(function (err, res) {
            // Check for something
        });
    console.log('end');
});

当数组中只有1个URL时,它可以正常工作。但是,如果我添加第二个,则输出失败:

begin
end
begin

file.js:11
request = request(json)
^
TypeError: object is not a function

我的猜测是,我无法运行两次超级运行实例,但我似乎找不到解决方案来解决这个问题。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:2)

这是因为您的作业request = request(url)会覆盖请求函数。

var urls = [
    "https://www.example.com",
    "https://www.example2.com"];

urls.forEach(function (url) {
    console.log('begin');
    var r = request(url)
        .get('')
        .expect(200)
        .end(function (err, res) {
        // Check for something
    });
    console.log('end');
});

在第一次迭代中,request指的是全局函数,但在评估request = request(url)语句时,request的值会更改为request(url)返回的值,因此在第二次迭代中,request不再是您期望的功能。

答案 1 :(得分:0)

更改以下内容

request = request(url)
    .get('')
    .expect(200)
    .end(function (err, res) {
        // Check for something
    });

requestVariable = request(url)
    .get('')
    .expect(200)
    .end(function (err, res) {
        // Check for something
    });