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



我正在使用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是一个局部变量,但我不明白为什么。

fs.readFilecallback在您登录obj调用,因为fs.readFile是异步

的如果确实想以同步方式读取数据,可以使用fs.readFileSync,或在回调中将渲染更改为

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

如果您只是尝试从磁盘读取 json 文件,则可以要求它:

var data = require('somepath');

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

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

最新更新