当NodeJS JSON应该是全局的时,它是本地的

时间:2017-07-11 10:27:03

标签: json node.js express ejs

我正在使用nodeJS express ejs。我的JSON问题在渲染我的ejs文件之前没有填充数据。

app.get('/', function(req, res) { 
    fs.readFile('somepath', 'utf8', function(errRead, data) { 
        var obj;
        if(errRead) { 
            obj = {loaded : false};
        } else {
            var nbCam = 0;
            fs.readFile('somepath', 'utf8', function(errRead, data) {
                if(errRead) throw errRead; 
                for(var i in JSON.parse(data).currentAcquisitionSet) {
                    ++nbCam;
                }
                obj = {loaded : nbCam, images : JSON.parse(data).images};
            });
        }
        console.log(obj); // why is it undefined here?
        res.render('a.ejs', obj);});
    });
});

看起来我的obj是一个局部变量,但我无法理解为什么。

2 个答案:

答案 0 :(得分:0)

callback的{​​{1}}在您fs.readFile之后被调用,因为fs.readFile 异步

如果您确实想要以同步方式阅读数据,可以使用fs.readFileSync,或将回放更改为回调

obj

答案 1 :(得分:0)

如果你只是想从磁盘读取一个json文件,你可以只需要它:

var data = require('somepath');

这将在您的应用首次调用时同步加载文件,然后将其存储在npm缓存中。

我可能会在带有其他require语句的文件顶部而不是在路由处理程序中调用它,但这是我的偏好。