我正在将EJS模板与Node.js和Express一起使用。我正在尝试将请求参数传递给我的EJS模板。但是它正在运行,由于某种原因,我的控制台日志报告了一些奇怪的情况。
版本:
节点0.10.26
快递4.6.1
EJS 0.8.5
这是处理ejs模板的路由:
var express = require('express');
var router = express.Router();
var data = require('../data.json');
var pkg = require('../../package.json');
router.get('/', function(req, res) {
res.render('index',
{
'acs' : data.acs,
'products' : data.products,
'pkg' : pkg,
'debug' : req.param('debug')
});
});
module.exports = router;
这是控制台日志(为了节省空间,我用“ ...”替换了很长的内容)
var __stack = {
lineno: 1,
input: "<!DOCTYPE html>\n<html lang=\"en\"> ... </html>\n",
filename: "/web/app/views/index.ejs" };
function rethrow(err, str, filename, lineno){
var lines = str.split('\n')
, start = Math.max(lineno - 3, 0)
, end = Math.min(lines.length, lineno + 3);
// Error context
var context = lines.slice(start, end).map(function(line, i){
var curr = i + start + 1;
return (curr == lineno ? ' >> ' : ' ')
+ curr
+ '| '
+ line;
}).join('\n');
// Alter exception message
err.path = filename;
err.message = (filename || 'ejs') + ':'
+ lineno + '\n'
+ context + '\n\n'
+ err.message;
throw err;
}
try {
var buf = [];
with (locals || {}) { (function(){
buf.push('<!DOCTYPE html>\n<html lang="en">...</html>\n'); })();
}
return buf.join('');
} catch (err) {
rethrow(err, __stack.input, __stack.filename, __stack.lineno);
}
就像我说的那样,它正在工作,但是我不能说出为什么要在控制台中记录它。谢谢您的帮助!
最佳答案
问题在于,传递给res.render()
的第二个参数同时传递给呈现引擎和模板。由于这种行为,ejs(在撰写本文时至少达到1.0)在该对象中为determine if debug information will be printed寻找debug
属性。