Как сделать 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 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"});
});
 user10 февр. 2013 г., 17:12
Поскольку ваш плагин предназначен для того, чтобы помогать людям, мы рады, что в этом весь смысл этого сайта, чтобы помочь ...
 Druska04 авг. 2013 г., 07:12
Спасибо cue8chalk. Это было сложнее, чем нужно было найти.
Решение Вопроса

чтобы использовать doT в качестве движка шаблонов следующим образом:

app.set("view engine", "html");
app.register('.html', doT);
 esp27 янв. 2013 г., 14:21
@olado что такое решение для экспресс 3? Это хорошая идея для использованияэто? Спасибо
 user12 февр. 2012 г., 08:57
Спасибо, что, похоже, сработало. Всегда приятно получить ответ от создателя. Мне все еще нужно выяснить, как перебирать записи, которые я извлекаю из mongodb, но это будет другой вопрос ... Спасибо.
 user12 февр. 2012 г., 21:06
Привет, может быть, вы могли бы посмотреть вэто вопрос тоже, он основан на том, что вы ответили здесь. Я думаю, что вы наиболее квалифицированы для решения этого вопроса. Пожалуйста, помоги, если можешь.
 user21 мая 2012 г., 16:54
Можете ли вы посмотреть на эту проблемуstackoverflow.com/questions/9252191/...

он еще не поддерживается. Однако вы можете использовать экспресс-точку:

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.x.x. Я не нашел экспресс-пример из @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>

Ваш ответ на вопрос