var dir = require('node-dir');
var path = require('path');
var fs = require('fs');
var root_directory = "C:/ProgramData/XXX/YYY/Resources/LocalLibrary";
function getitems(res, fileHandler){
dir.files(root_directory, function(err, files) {
if (err) throw err;
fileHandler(res, files);
});
};
function fileHandler(res, files) {
var finaldependency = [];
files.forEach(function (fileName) {
if (path.extname(fileName) === '.Item') {
var singleObj = {};
singleObj['key'] = fileName;
var content = fs.readFileSync(path.resolve(fileName), "utf8");
var json = JSON.parse(content);
singleObj['value'] = json.References;
finaldependency.push(singleObj);
}
});
res.json(finaldependency);
}
module.exports = function(app) {
// api ---------------------------------------------------------------------
// get all items
app.get('/api/item', function(req, res) {
// use mongoose to get all items in the database
getitems(res, fileHandler);
});
涉及的步骤: 1.当收到请求进程时,root_directory中存在的所有文件(它包含许多嵌套的子目录) 2.在node-dir模块的帮助下获取所有文件的列表 3.将文件列表传递给异步fileHandler
我的问题?我正在做一个文件处理的同步阻塞风格(fs.readfileSync)! 并将数据作为键值对附加到外部作用域列表finaldependency
这是正确的方法吗?还是有任何优化的方法来做这个???
答案 0 :(得分:0)
您的fileHandler
功能可能需要很长时间才能阻止客户端请求。随着客户端请求的增加,服务器在请求处理方面的性能可能会变差。
您可以尝试在process.nextTick中执行forEach
循环。