1

我的服务器上有几个包含 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()吗?开导我。

4

2 回答 2

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);
  });
});
于 2013-11-11T20:56:06.167 回答
0

使用 each 的回调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});
    });
});
于 2013-11-11T20:52:06.107 回答