使用 Expressjs 将 JSON 数据渲染到 ejs 视图

Render JSON data onto ejs view with Expressjs

我正在尝试从网页上的 JSON 文件中获取 2 个值。 obj["fruit"] 和 obj["thyroid"]。我使用ejs作为模板视图引擎和expressjs。

下面的方法说 "fruit" 和 "thyroid" 是未定义的。 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
});

fs.readFile(path[ options], callback) 是读取文件的异步方式。您的代码设置节点的方式将开始读取文件,然后在文件 data 完成读取之前立即调用 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
    });
});