使用Expressjs将JSON数据呈现到ejs视图上

使用Expressjs将JSON数据呈现到ejs视图上,json,node.js,express,render,Json,Node.js,Express,Render,我试图从网页上的JSON文件中获取2个值。 obj[“水果”]和obj[“甲状腺”]。我使用ejs作为模板视图引擎和expressjs 下面的方法表示“水果”和“甲状腺”未定义。但是console.log可以工作 app.post('/top', function (req, res) { var obj; fs.readFile('./object.json', 'utf8', function (err, data) { if (err) throw err;

我试图从网页上的JSON文件中获取2个值。 obj[“水果”]和obj[“甲状腺”]。我使用ejs作为模板视图引擎和expressjs

下面的方法表示“水果”和“甲状腺”未定义。但是console.log可以工作

app.post('/top', function (req, res) {
    var obj;
    fs.readFile('./object.json', 'utf8', function (err, data) {
        if (err) throw err;
        obj = JSON.parse(data);
        console.log(obj["fruit"]);
        console.log(obj["thyroid"]);

    });
    res.render(
        'disp.ejs',
        { 
            food: obj["fruit"]
            name: obj["thyroid"]

        }); // render
});
(路径[,选项],回调)是读取文件的异步方式。代码的读取方式设置节点将开始读取文件,然后在文件
数据
读取完成之前立即调用res.render

如果将res.render放在回调函数中,则仅当文件读取完毕且
data
变量满足您的需要时才会调用它

例如:

app.post('/top', function (req, res) {
    var obj;
    fs.readFile('./object.json', 'utf8', function (err, data) {
        if (err) throw err;
        obj = JSON.parse(data);
        console.log(obj["fruit"]);
        console.log(obj["thyroid"]);
        res.render(
          'disp.ejs',
          { 
            food: obj["fruit"]
            name: obj["thyroid"]

          }); // render
    });
});

readFile是一个异步操作,请将res.render代码放入fs.readFile的函数回调中