从文件中读取数据并使用jade传递给模板

时间:2016-04-08 02:22:46

标签: node.js pug

我有两个文件可以保存数据:

FILE1.TXT

Title1
Desc1

FILE2.TXT

Title2
Desc2

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

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

这是我的 server.js:

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

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

1 个答案:

答案 0 :(得分:1)

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

从磁盘读取非常简单:使用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});
  });
});