Używam szablonów EJS z Node.js oraz Express. Próbuję przekazać parametr żądania do mojego szablonu EJS. Działa jednak z jakiegoś powodu mój dziennik konsoli zgłasza coś dziwnego.
Wersje:
- Węzeł 0.10.26
- Express 4.6.1
- EJS 0.8.5
Oto trasa obsługująca szablon 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;
To jest dziennik konsoli (Zastąpiłem wszystko długie na „...”, aby zaoszczędzić miejsce)
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 + "nn"
+ 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);
}
Tak jak powiedziałem, działa, ale nie mogę powiedzieć, dlaczego jest to rejestrowane w konsoli. Dzięki za pomoc!
Odpowiedzi:
2 dla odpowiedzi № 1Problem w tym, że drugi argument został przekazany do res.render()
jest przekazywana do obu silników renderujących I Twój szablon. Z powodu tego zachowania ejs (przynajmniej do 1.0 w chwili pisania tego tekstu) szuka pliku debug
właściwość w tym obiekcie do określić, czy informacje debugowania zostaną wydrukowane.