使用NodeJS将Web数据写入JSON文件

时间:2018-01-29 19:25:43

标签: javascript json node.js

我正在编写一个应用程序,可以将角色的粉丝网站作为练习练习。目前我有一系列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"
}

1 个答案:

答案 0 :(得分:1)

最好只修改内存中的javascript对象,然后以覆盖/替换方式将其全部保存到文件中,而不是追加到文件中(除非您希望文件变得如此巨大)它破坏了内存限制)。

为此,只需维护数据的内存副本,然后将其写出:fs.writeFile(fileName, JSON.stringify(content, null, 4));

否则,您必须弄清楚如何在旧对象中插入新对象,否则可能使json无效。