我正在将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属性。

09-30 14:53
查看更多