NodeJS检索JSON并提供给EJS模板

时间:2017-11-23 11:55:13

标签: json node.js express ejs fs

我的目的是获取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);
   });
}'

1 个答案:

答案 0 :(得分:0)

问题是你的数据是异步的,你不会在渲染之前等待它们。事实上,你现在甚至不运行users.retrieve_users函数,只需返回函数声明并表达将其呈现为字符串!将您的代码更改为此。

//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>