【问题标题】:NodeJS JSON is local when it should be globalNodeJS JSON 是本地的,但它应该是全局的
【发布时间】:2017-12-15 08:39:34
【问题描述】:

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

【问题讨论】:

    标签: json node.js express ejs


    【解决方案1】:

    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);
            });
        });
    });
    

    【讨论】:

    • 谢谢,我完全忘记了异步部分。
    【解决方案2】:

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

    var data = require('somepath');
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多