我有两个文件可以保存数据:
FILE1.TXT
Title1
Desc1
FILE2.TXT
Title2
Desc2
然后我有一个玉模板,我需要从上面的每个文件传递第1行和第2行。这是玉模板:
.title #{title}
.desc #{desc}
这是我的 server.js:
app.get('/', function (req, res) {
res.render('index');
});
如何将每个数据文件中的行传递给模板?
答案 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});
});
});