res.render里面的req.param会导致奇怪的控制台日志

时间:2014-07-20 21:31:35

标签: node.js express

我正在使用带有Node.js和Express的EJS模板。我正在尝试将请求参数传递给我的EJS模板。但是,由于某种原因,我的控制台日志报告了一些奇怪的内容。

版本:

  • 节点0.10.26
  • Express 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);
}

就像我说的那样,它正在工作,但是我不知道为什么这会被记录在控制台中。谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

问题是传递给res.render()的第二个参数传递给渲染引擎 AND 你的模板。由于这种行为,ejs(在撰写本文时至少通过1.0)在该对象中查找debug属性determine if debug information will be printed