从唯一响应中的多个文件中获取JSON数据

时间:2013-11-11 20:42:19

标签: json node.js express

我的服务器上有几个包含JSON数据的文件。我想通过一个GET请求接收这些文件中包含的数据。

现在我的代码看起来像这样:

app.get('/json', function(req, res){

    fs.readFile(__dirname + '/file01.json', function(err, content){
        var data01 = content;
    });

    fs.readFile(__dirname + '/file02.json', function(err, content){
        var data02 = content;
    });

    res.send({file01: data01, file02: data02});

});

我知道这绝对不是这样做的,在发送响应时仍然会读取文件,而且我不确定data01和data02是否是全局定义的。

但是,这样做的方法是什么?

我应该使用流吗?我应该使用多个res.write()吗?启发我。

2 个答案:

答案 0 :(得分:3)

非常适合async.parallel

var async = require('async');
app.get('/json', function(req, res) {
  var work = {
    file01: async.apply(fs.readFile, __dirname + '/file01.json'),
    file02: async.apply(fs.readFile, __dirname + '/file02.json')
  };
  async.parallel(work, function (error, results) {
    if (error) {
      res.status(500).send(error);
      return;
    }
    //might need string->Object here
    results['file01'] = JSON.parse(results['file01']);
    results['file02'] = JSON.parse(results['file02']);
    res.send(results);
  });
});

答案 1 :(得分:0)

使用每个readFile的回调进行下一步操作:

fs.readFile(__dirname + '/file01.json', function(err, content){
    var data01 = content;
    //Might be smart to do some err checking here
    //if (err) send error
    //else read the next file
    fs.readFile(__dirname + '/file02.json', function(err, content){
        //if (err) again
        var data02 = content;
        res.send({file01: data01, file02: data02});
    });
});