您好我想知道如何在dot.js模板引擎中渲染输出。我认为这是关于nodejs模板的一般性问题。(阅读评论以获取更多信息)。我之所以选择这个模板引擎而不是jade或ejs,是因为它似乎是最快的引擎。
这是我的app.js:
var express = require('express'),
app = express.createServer(),
doT = require('doT'),
pub = __dirname + '/public',
view = __dirname + '/views';
app.configure(function(){
app.set('views', view);
app.set('view options', {layout: false});
app.set('view engine', 'dot');
app.use(app.router);
});
app.register('.html', {
compile: function(str, opts){
return function(locals){
return str;
}
}
});
app.get('/', function(req, res){
//This is where I am trying to send data to the front end....
res.render('index.html', { output: 'someStuff' });
});
这是我的HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<title>Index</title>
</head>
<body>
//This is where I am trying to receive data and output it...
{{=it.output}}
</body>
</html>
我找不到好的文档。这还不够:http://olado.github.com/doT/。如果可以的话请帮忙。这将提高我对数据如何传递到nodejs中的视图的指数式理解。谢谢。
答案 0 :(得分:14)
你需要让表达知道使用doT作为模板引擎,如下所示:
app.set("view engine", "html");
app.register('.html', doT);
答案 1 :(得分:5)
我的帖子是一个无耻的插件,但它可能会帮助某人。
我对现有模块使用Express 3.x的方式不太满意,我写了一个叫做dot-emc的文件:
https://github.com/nerdo/dot-emc
用法类似于上面发布的内容。使用nom:
安装它npm install dot-emc
然后将其设置为默认视图引擎。我更喜欢使用.def扩展名,因为我的文本编辑器将.dot文件识别为Graphviz文件,所以语法略有不同:
app.engine("def", require("dot-emc").__express);
app.set("view engine", "def");
然后您就可以像使用路线中的任何其他视图引擎一样开始使用它,例如:
app.get("/", function(req, res) {
res.render("index", {"title": "title goes here"});
});
答案 2 :(得分:1)
如果你正在运行快递3,它还不支持。但是你可以使用express-dot:
npm install express-dot
然后在configure
中app.set('view engine', 'dot' );
app.engine('dot', require('express-dot').__express );
然后在路线中:
res.render('profile', {}); // you will need to create views/profile.dot
答案 3 :(得分:1)
我知道这是一个老问题,但我最近想用标准生成的Express 4.x.x应用程序来测试doT。我没有找到@olado的快速示例,以便与我生成的应用程序轻松匹配。我尝试了不同的插件(让它工作,但不满意),所以我最终编写了这样的模板引擎,以获得支持包含(#)的预编译点文件,而无需任何额外的插件:
var users = require('./routes/users');
// Standard app above this
var dot = require("dot").process({
path: (__dirname + "/views")
});
var app = express();
// view engine setup
app.engine('dot', function(template, options, cb){
// using .dot files
var temp = path.parse(template).name;
var cont = dot[temp](options);
return cb(null, cont);
// Or as one liner
// return cb(null, dot[path.parse(template).name](options));
// If you want to do error checking, return the error as callback functions first arg
// return cb(new Error('Something went wrong');
});
app.set('views', path.join(__dirname, './views'));
app.set('view engine', 'dot');
// Standard generated app below this
现在我可以在标准&#34; res.render&#34;中使用它。像这样的路线(对于index.js):
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
请记住在.dot模板文件中使用{{it.value}}。在上面的基本示例中,index.dot看起来像这样:
<!DOCTYPE html>
<html>
<head>
<title>{{=it.title}}</title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<h1>{{=it.title}}</h1>
<p>Welcome to {{=it.title}}</p>
</body>
</html>