javascript - 使用 Express 和 Node 将 json 文件发送到 pug 模板

标签 javascript json node.js express pug

请原谅我,但我的表达方式还是有点新。我有一个运行简单主页的哈巴狗模板。在同一台服务器上,我有一个包含事件列表的 json 文件。我想将此 json 文件中的数据发送到 pug 模板并在 div 中对其进行迭代。我使用 fs 加载文件,使用 lodash map 将其映射到数组。我已经为 pug 文件创建了路径,但我不知道如何将两者链接在一起,即将我的 fs 函数中创建的数组传递给 jade 路径。到目前为止我有以下内容

var file = __dirname + '/events.json';
fs.readFile(file, 'utf8', function (err, data) {
if (err) {
  console.log('Error: ' + err);
  return;
}

var data = JSON.parse(data);

var newEventList = data.events.map(events => ({
    id: events.id ,
    name: events.name ,
    venue: events.place.name ,
    address: events.place.location.street + " " + events.place.location.city + " " + events.place.location.zip ,
    coverPicture: events.coverPicture ,
    description: events.description ,
    startTime: events.startTime ,
    endTime: events.endTime
 }));
});


app.get('/', function (req, res) {
 res.render('index', { title: 'Hey', message: 'Hello there!', 
   newEventList })
  })

有人能指出我正确的方向吗?此刻我得到了

ReferenceError: newEventList is not defined

所以我想我需要一种方法让路由看到 newEventList 数组。谢谢。

最佳答案

你正在做的事情不起作用,因为:

a) 您没有对 readFile 回调中的 data 参数执行任何操作

b) node.js 是异步的,因此数据的解析以及 app.get 都会在回调完成之前运行

一个简单的解决方案就是替换所有这些:

var file = __dirname + '/events.json';
fs.readFile(file, 'utf8', function (err, data) {
if (err) {
  console.log('Error: ' + err);
  return;
}

var data = require('./events.json') 

它将同步运行,以便变量data始终可用。

或者,如果您出于任何原因(出于练习和理解或其他原因)想要使用 fs,您将需要在 app.get( 的回调中完成所有这些操作) '/')。并将您返回的数据分配给回调内部的变量。

希望这是有道理的吗?

关于javascript - 使用 Express 和 Node 将 json 文件发送到 pug 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47367991/

相关文章:

javascript - Jquery 手机 : Select menus events

javascript - 如何在 SlideJS 中创建播放/暂停按钮?

javascript - 如何动态创建 JavaScript 数组(JSON 格式)?

node.js - 查询值在发送到 MongoDB 之前会自动引用吗?

javascript - deviceready 不开火 Cordova

javascript - 如何获取 javascript 嵌套对象中最深嵌套对象的键(路径)

java - 从 Java 创建 JSON

Java:将 json 数组插入 MongoDB 时出错

javascript - MongoDB 对具有相似子文档的文档进行建模

Node.js : How to return Object in Query Aggregation?