繁体   English   中英

使用Express和Node将json文件发送到哈巴狗模板

[英]Send a json File to a pug template with Express and Node

原谅我,但我还是有点陌生​​。 我有一个运行简单主页的帕格模板。 在同一台服务器上,我有一个包含事件列表的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('/')的回调中完成所有操作。 并指定你回到回调内部变量的数据。

希望这有意义吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM