NodeJS 检索 JSON 并提供给 EJS 模板

NodeJS retrieve JSON and serve to EJS template

我的目的是获取 JSON 并将其提供给 EJS 文件。

这是我的代码:

//server.js

users = require('./controllers/users.js');

global.app_root = path.resolve(__dirname);

app.get('/users', function(req, res) {
    res.render('partials/users', {
        data: users.retrieve_users
    });
})

//users.js

var fs = require("fs");

exports.retrieve_users = function (req, res) {
   fs.readFile(app_root + "/config/" + "users-list.json", 'utf8', function (err, data) {
      res.end(data);
   });
}

//users.ejs

<body>
   <%= data %>
</body>

但是作为正文中这段代码的输出,我从字面上看到了这个字符串:

'function (req, res) {
   fs.readFile(app_root + "/config/" + "users-list.json", 'utf8', function (err, data) {
      res.end(data);
   });
}'

问题是您的数据是异步传入的,您没有在呈现之前等待它们。事实上,现在你甚至没有 运行 users.retrieve_users 函数,你只是取回函数声明并 express 将其呈现为字符串!将您的代码更改为此。

//server.js

users = require('./controllers/users.js');

global.app_root = path.resolve(__dirname);

app.get('/users', function(req, res) {
   
    //a method that get thr user-list data and renders it
    users.retrieve_users()
      .then(function(users){
         res.render('partials/users', {
            data: users
        });
      })
      .catch(function(err){
         res.status(500).send({ error: 'something blew up' });
      })
    
})

//users.js

var fs = require("fs");

exports.retrieve_users = function () {
   //function that returns user-list in promise
   return new Promise(function(resolve,reject){
       fs.readFile(app_root + "/config/" + "users-list.json", 'utf8', function (err, data) {
          if(err) return reject(err)
          resolve(data);
       });
   })
  
}

//users.ejs

<body>
   <%= data %>
</body>