我正在编写一个应用程序,可以将角色的粉丝网站作为练习练习。目前我有一系列URL,我正在循环并抓取我想要的数据,然后将此数据输出到output.json文件以便以后存储。写入此文件时,我的格式有问题。
也许我应该以不同的方式存储我的数据,我愿意接受有关最佳做法/其他方法的建议。我想稍后可以访问这些数据。
server.js
var express = require('express');
var cheerio = require('cheerio');
var app = express();
var rp = require('request-promise');
var fsp = require('fs-promise');
app.get('/', function(req, res){
urls = [
'fansite.com/boss1', 'fansite.com/boss2'
];
function parse(html) {
var bosses = require('./output.json');
var $ = cheerio.load(html);
$('.page-header__title').filter(function () {
var data = $(this);
name = data.text();
bosses.name = name;
})
return bosses;
}
var append = file => content => fsp.appendFile(file, JSON.stringify(content, null, 2));
urls.forEach(function (url) {
rp(url)
.then(parse)
.then(append('output.json'))
.then(() => console.log('Success'))
.then(res.send('Bosses Updated.'))
.catch(err => console.log('Error:', err));
});
})
app.listen('8081')
console.log('Running on port 8081');
exports = module.exports = app;
output.json
{
}{
"name": "Boss1"
}{
"name": "Boss2"
}
答案 0 :(得分:1)
最好只修改内存中的javascript对象,然后以覆盖/替换方式将其全部保存到文件中,而不是追加到文件中(除非您希望文件变得如此巨大)它破坏了内存限制)。
为此,只需维护数据的内存副本,然后将其写出:fs.writeFile(fileName, JSON.stringify(content, null, 4));
否则,您必须弄清楚如何在旧对象中插入新对象,否则可能使json无效。