我有两个保存数据的文件:
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/