读取json文件并将特定数组附加到外部作用域列表 - javascript - Nodejs

时间:2015-05-21 02:21:53

标签: javascript json node.js

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

这是正确的方法吗?还是有任何优化的方法来做这个???

1 个答案:

答案 0 :(得分:0)

您的fileHandler功能可能需要很长时间才能阻止客户端请求。随着客户端请求的增加,服务器在请求处理方面的性能可能会变差。

您可以尝试在process.nextTick中执行forEach循环。