我正在使用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是一个局部变量,但我无法理解为什么。
答案 0 :(得分:0)
callback
的{{1}}在您fs.readFile
之后被调用,因为fs.readFile
异步
如果您确实想要以同步方式阅读数据,可以使用fs.readFileSync
,或将回放更改为回调
obj
答案 1 :(得分:0)
如果你只是想从磁盘读取一个json文件,你可以只需要它:
var data = require('somepath');
这将在您的应用首次调用时同步加载文件,然后将其存储在npm缓存中。
我可能会在带有其他require语句的文件顶部而不是在路由处理程序中调用它,但这是我的偏好。