我的服务器上有几个包含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()
吗?启发我。
答案 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});
});
});