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!');
}
});