node.js - 使用jade从文件中读取数据并传递到模板

标签 node.js pug

我有两个保存数据的文件:

file1.txt

Title1
Desc1

file2.txt

Title2
Desc2

然后我有一个 Jade 模板,我需要从上面的每个文件传递第 1 行和第 2 行。这是 Jade 模板:

.title #{title}
.desc #{desc}

这是我的server.js:

app.get('/', function (req, res) {
    res.render('index');
});

如何将每个数据文件中的行传递到模板?

最佳答案

您需要从磁盘读取,解析格式,然后将解析后的数据传递到您的模板。

从磁盘读取相当简单:使用fs.readFile()

var fs = require('fs');
fs.readFile(filename, 'utf8', function(err, data) {
  // do something with "data" here...
});

也许您需要为单个请求读取两个文件?在这种情况下,您将不得不嵌套回调。或者,您可以使用像 bluebird 这样的 promise 库。简化回调。

var fs = require('fs');

fs.readFile(filename1, 'utf8', function(err, data1) {
  fs.readFile(filename2, 'utf8', function(err, data2) {
    // ... now parse in here
  });
});

获得数据后,您将需要对其进行解析。根据您的示例,您的格式非常简单。您可以这样解析它:

var lines = data.split(/\r?\n/);
var title = lines.shift();
var desc = lines.shift(); 
// or, maybe "lines.join('\n')" to support multiple lines

最后,您希望将模板呈现给客户端。如果您使用的是 Express(仅基于代码示例 - 您没有指定),您可以将模板变量作为第二个参数的属性传递给 res.render()

var fs = require('fs');
app.get('/', function(req, res, next) {
  fs.readFile(filename, 'utf8', function(err, data) {
    // reading the file failed, report error to the user
    if (err) return next(err);

    // parse the data
    var lines = data.split(/\r?\n/);
    var title = lines.shift();
    var desc = lines.shift();

    // render template
    res.render('index', {title: title, desc: desc});
  });
});

关于node.js - 使用jade从文件中读取数据并传递到模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36490452/

相关文章:

javascript - 如何在node.js中生成进程时记录信息?

node.js - 正在寻找像 JHipster 但使用 NodeJs 的初始 Web 应用程序生成器

html - 带有非滚动标题的可滚动表

node.js - Jade/Pug 设置输入字段的值

javascript - 为什么我得到一个带有模态的 slider ?

javascript - Angular $http POST 无法将数据发送到expressjs

node.js - Socket.IO 向房间发送聊天消息

node.js - fs.appendFile 成功后退出 Node 进程

javascript - 访问 jade 模板中的数据(制作静态 html)

javascript - 咕噜 Jade 编译