Как сделать doT.js шаблонами в nodejs?
Привет, я хотел бы знать, как я могу сделать вывод в движке шаблонов 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. Спасибо.
4 ответа
Вы должны сообщить Express, чтобы использовать doT в качестве движка шаблонов следующим образом:
app.set("view engine", "html");
app.register('.html', doT);
Мой пост - бесстыдный плагин, но он может кому-то помочь.
Я не был очень доволен тем, как существующие модули работают с Express 3.x, я написал один под названием dot-emc:
https://github.com/nerdo/dot-emc
Использование аналогично тому, что было опубликовано выше. Установите его с помощью имени:
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"});
});
Если вы используете Express 3, он еще не поддерживается. Однако вы можете использовать экспресс-точку:
npm install express-dot
Тогда в настрой
app.set('view engine', 'dot' );
app.engine('dot', require('express-dot').__express );
Тогда в маршрутах:
res.render('profile', {}); // you will need to create views/profile.dot
Я знаю, что это старый вопрос, но недавно я хотел протестировать doT со стандартным приложением Express 4.xx. Я не нашел экспресс-пример из @olado, который бы легко соответствовал моему сгенерированному приложению. Я пробовал разные плагины (заставить его работать, но не доволен), поэтому я закончил писать движок шаблонов вот так, чтобы получить предварительно скомпилированные точечные файлы с поддержкой include (#) без какого-либо дополнительного плагина:
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
Теперь я могу использовать его стандартным способом "res.render" в маршрутах, подобных этому (для index.js):
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
Не забудьте использовать {{it.value}} в файлах шаблонов.dot. В приведенном выше базовом примере 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>