NodeJS数组正在变得未定义?

时间:2014-06-11 04:18:45

标签: javascript arrays node.js

我正在使用带有Request和Cheerio库的NodeJS实现Web scraper。 我正在尝试将已删除的URL链接保存到数组中,但是,由于某种原因,当我尝试导出它时,我的数组最终变为未定义。

最后的console.log(url_dict)将数据打印到终端,但如果我将模块导出到另一个.js文件并将其打印到终端(使用console.log),我会收到一个未定义的错误。

有什么想法?非常感谢你的时间! :)

var request = require('request');
var cheerio = require('cheerio');

var senatorlist = 'http://en.wikipedia.org/wiki/Seniority_in_the_United_States_Senate';

var url_dict = [];

function lister() {
    request(senatorlist, function(err, resp, body) {
        if (err)
            throw err;
        var $ = cheerio.load(body);
        $('table.wikitable tr a').each(function(i, link){
            url_dict.push($(link).attr('href'));
        });
        console.log(url_dict); 
    });
}

2 个答案:

答案 0 :(得分:1)

如果您的其他应用只有一个需求和一个日志,那么它显然不会等待lister()功能中的数据,甚至无法调用它。发送回调给你的利斯特函数:

function lister(callback) {
    request(senatorlist, function(err, resp, body) {
        if (err)
            throw err;
        var $ = cheerio.load(body);
        $('table.wikitable tr a').each(function(i, link){
            url_dict.push($(link).attr('href'));
        });
        console.log(url_dict);
        callback(url_dict);
    });
}

在你的其他js文件中:

lister(function(url_dict) {
    console.log('other js url_dict:', url_dict);
});

答案 1 :(得分:0)

API CALL

app.get("/someurl",req,res){
    request(senatorlist, function(err, resp, body) {
        if (err)
            throw err;
        var $ = cheerio.load(body);
        $('table.wikitable tr a').each(function(i, link){
            url_dict.push($(link).attr('href'));
        });
        console.log(url_dict);
        res.json(url_dict); 
    });
}

客户端

$http.get("/someurl").success(function(data,status,headers,config){
    console.log("success",data);
    $scope.items=data;
}).error(function(data,status,headers,config){
        console.log("error",data);
    });
};

尝试在服务器上执行此操作并传递此json以显示数据。希望这能解决您的疑问。 :)