当nodejson应该是全局的时候,它是本地的
我正在与nodeJS express ejs合作。我的JSON有一个问题,在呈现ejs文件之前没有填充数据当nodejson应该是全局的时候,它是本地的,json,node.js,express,ejs,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 {
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是一个局部变量,但我不明白为什么。在您登录
obj
后,会调用fs的回调
如果确实希望以同步方式读取数据,则可以在回调中使用或将渲染更改为
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);
});
});
});
fs.readFile
的回调
在您以异步方式登录obj
后被调用
如果确实希望以同步方式读取数据,则可以在回调中使用或将渲染更改为
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语句调用它,而不是在路由处理程序中,但这是我的首选 如果您只是试图从磁盘读取json文件,您可以要求它:
var data = require('somepath');
这将在应用程序首次调用文件时同步加载该文件一次,然后将其存储在npm缓存中
我可能会在文件顶部用其他require语句调用它,而不是在路由处理程序中,但这是我的首选 谢谢,我完全忘记了异步部分。谢谢,我完全忘记了异步部分。