如何为(全局)重用

时间:2017-06-12 13:44:50

标签: javascript node.js promise screen-scraping

var request = require('request-promise');
var cheerio = require("cheerio");
var fs = require('fs');


function sums() {
    function parseSites(urls, callback) {
        var parsedSites = [];
        var promiseList = urls.map(getPage);

    Promise.all(promiseList).then(function (data) {
        callback(data.map(parse));
    });

    return parsedSites;
}

//get data at url
function getPage(url) {

    return request.get(url);
}

//cheerio element grabber
function parse(body) {
    var $ = cheerio.load(body);
    return $(".stats > h3:nth-child(1) > span:nth-child(1)").html();
}

//array urls
parseSites([
    'url1' (120),
    'url2' (6.7k),
    'url3' (12k)
],

    function transy(data) {

        //Turn all array elements into integers
        //OLD ARRAY, NEW ARRAY
        var q = data;
        var z = [];

        for (i = 0; i < data.length; i++) {

            var x = q[i];
            var y = x.includes('.');

            if (y) {
                y = x.replace(/k/, "00");
                y = y.replace('.', "");
            }
            else {
                y = x.replace(/k/, "000");
            }
            z.push(y);
        }    
        console.log(z);
    });
}

sums();

在节点中运行脚本会使'console.log(z)'返回:

['120', '6700', '12000']

我想使用此结果并能够将其作为json / object / variable解析为我的客户端。

我在客户端和范围内尝试解析/ stringify分别关闭我的'server.js'无效。这是在使用module.exports在'server.js'文件中'require'之后。

我试图将'console.log(z)'更改为'return z'以及链中的多个位置无效。

*快速说明:括号内的url(parseSites)后面的值是我用cheerio而不是实际代码进行抓取后得到的值。我使用'transy()'将它们作为整数值进行计算。

我在很多地方搜索了它并阅读(并且仍在阅读)节点文档和教程,但似乎我无法指出我做错了什么。

我认为这是因为异步运行时,但此时我只是在猜测。

我最后使用下面的代码将其解析为文件并以不同的方式使用它,但这在我的上下文中是“作弊”,而不是我真正想要它做的,这就是保持它在程序中没有活动的fs i / o。

var arr = z;
                var str = JSON.stringify(arr, null, 4);
                var filename = './public/output.js';
                var out = "var out = " + str + ";";

                fs.writeFile(filename, str, function (err) {
                    if (err) {
                        console.log(err);
                    } else {
                        console.log('File written!');
                    }
                });

0 个答案:

没有答案