0

我正在使用来自这里的 nodejs 请求模块:https ://github.com/mikeal/request - 涉及 cookie 但不是此代码的一部分。

请原谅未优化的代码,我一直在尝试各种尝试解决此问题的方法,但均未成功。我有这个简单的脚本:

function getPage(curpage)
{
    if(curpage <= pages)
    {
        var newpage = curpage + 1;
        console.log('getting page '+newpage );

        request.get({ uri: 'http://someurl.com/test', qs: { p : newpage }}, function(error, response, body) {
            if(error)
            {
                [...]
            }
            else
            {
                console.log(response.req.path);
            }
            getPage(newpage);
        });
    }
    else
    {
        console.log("We're done!\n");
        process.exit();
    }
}

这里的问题是我的 response.req.path 似乎卡在 2 处。我得到:

getting page 1
/id/bradpitt5/inventoryhistory?p=1
getting page 2
/id/bradpitt5/inventoryhistory?p=2
getting page 3
/id/bradpitt5/inventoryhistory?p=2
getting page 4
/id/bradpitt5/inventoryhistory?p=2

可以看到,“newpage”在获取页面时使用正确,但是请求路径设置错误?我无法理解这一点。谁能弄清楚我在这里做错了什么?

我只是从 getPage(0); 开始

我也使用不同的方法来做到这一点,只是为了确保我没有发疯:

for( var i = 1; i <= pages; i++ ) {
    urls.push( {'url' : 'http://somepage.com/test?p='+ i, 'done' : false } );
}

function getNextPage() {
    for(var i = 0; i < pages; i++ ) {
        if( urls[i].done == false ) {
            break;
        }
    }

    if( urls[i] && urls[i].done == false ) {
        urls[i].done = true;
        console.log( 'requesting: '+ urls[ i ].url );

        request.get( urls[ i ].url, function(error, response, body) {
                if(error) {
                    [...]
                } else {
                    console.log( 'received: '+ response.req.path +' ok. ');
                }
                getNextPage();
            }
        );
    } else {
        console.log("we're done!");
        process.exit();
    }
}

这也卡在第 2 页。

4

2 回答 2

0

其含义是:

{ uri: 'http://someurl.com/test', qs: { p : newpage }}

每次request.get()调用都不会更新。我想知道是否值得尝试创建一个新变量:

var options = {
    uri: 'http://someurl.com/test',
    qs: {
        p: newpage
    }
};

// let's debug just to be sure
console.log( "  options = %s", JSON.stringify( options, null, 2 ) );

request.get( options, function(error, response, body) {
    ...

我不知道是否是这种情况,但我想知道在函数调用中创建的对象是否只评估一次。

于 2013-07-02T14:41:11.800 回答
0

看来我只有“2 页”的数据,如果我试图超过页数,我请求的网站将重定向到最后一页。:(

于 2013-07-02T15:46:04.583 回答