【发布时间】:2014-07-31 11:46:48
【问题描述】:
我正在尝试使用 Express JS 和 Handlebars 创建一个基本网站。我有两个文件,page1Router.js 和 page1Router.handlebars。在 Handlebars 文件中,我有这个:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Page 1</title>
</head>
<script id="page1_template" type="text/x-handlebars-template">
<body>
{{#data.info}}
<h1>{{reportMessage 1}}</h1> <br>
{{/data.info}}
<a href="http://localhost:3030/anotherpage">Click here to go to another page.</a>
</body>
</script>
</html>
在我的 JS 文件中:
var config = require("../config/config").config,
express = require("express"),
router = express.Router(),
logger = require("../logger/logger").logger,
jsdom = require("jsdom"),
$ = require('jquery')(jsdom.jsdom().createWindow()),
Handlebars = require('handlebars'),
source = $("#page1_template").html(),
template = Handlebars.compile(source);
router.get('/page1', homepage);
var data = {
info: [
{message:"Hey this is a message"},
{message:"This is a different message"},
{message:"This is a final message"}
]
};
Handlebars.registerHelper('reportMessage', function(mes) {
if (mes == 1) {
return info[0].message;
} else if (mes == 2) {
return info[1].message;
}
return "This is an error message";
});
function homepage(req, res) {
res.render(__dirname + "/page1Router.handlebars", data);
logger.info(config.Message1);
}
$('body').append(template(data));
module.exports = router;
当我尝试使用“node app”运行服务器时,出现以下错误:
/Users/iantait/BroboticsForever/practice/node_modules/handlebars/dist/cjs/handlebars/compiler/compiler.js:436
throw new Exception("You must pass a string or Handlebars AST to Handlebar
^
Error: You must pass a string or Handlebars AST to Handlebars.compile. You passed undefined
at new Error (<anonymous>)
at Error.Exception (/Users/iantait/BroboticsForever/practice/node_modules/handlebars/dist/cjs/handlebars/exception.js:13:41)
at compile (/Users/iantait/BroboticsForever/practice/node_modules/handlebars/dist/cjs/handlebars/compiler/compiler.js:436:11)
at HandlebarsEnvironment.hb.compile (/Users/iantait/BroboticsForever/practice/node_modules/handlebars/dist/cjs/handlebars.js:19:12)
at Object.<anonymous> (/Users/iantait/BroboticsForever/practice/routers/page1Router.js:9:27)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
我的问题是:jquery 如何知道在哪里寻找“page1_template”?我相信这个错误正在发生,因为 jquery 没有正确找到“page1_template”脚本,但我不知道为什么。有什么建议吗??
【问题讨论】:
标签: jquery express handlebars.js