Как установить движок шаблонов marko в expressjs 4.0
Я хочу использовать шаблонизатор marko вместе с expressjs 4.0. Когда я удаляю шаблонизатор по умолчанию, я получаю следующую ошибку
Ошибка: движок по умолчанию не указан и расширение не указано. в новом представлении (E:\nodeleap\node_modules\express\lib\view.js:48:42) в EventEmitter.app.render (E:\nodeleap\node_modules\express\lib\application.js:545:12) в ServerResponse.res.render (E:\nodeleap\node_modules\express\lib\response.js:938:7) в E:\nodeleap\config\express.js:106:19 в Layer.handle [как handle_request] (E:\nodeleap\node_modules\express\lib\router\layer.js:82:5) в trim_prefix (E:\nodeleap\node_modules\express\lib\router\index.js:302:13) в E:\nodeleap\node_modules\express\lib\router\index.js:270:7 в Function.proto.process_params (E:\nodeleap\node_modules\express\lib\router\index.js:321:12) в следующем (E:\nodeleap\node_modules\express\lib\router\index.js:261:10) в Layer.handle [как handle_request] (E:\nodeleap\node_modules\express\lib\router\layer.js:78:12)
1 ответ
Похоже, что marko еще не поддерживается механизмами экспресс-просмотра (см. Здесь: https://github.com/tj/consolidate.js).
Изменить: Но часто задаваемые вопросы Marko рекомендует не использовать механизм экспресс-просмотра. Вариант 1 ниже должен работать.
Итак, я вижу несколько вариантов: 1. Просто визуализируйте ваши шаблоны, используя marko непосредственно в каждом из ваших маршрутов, или 2. Настройте свой собственный механизм экспресс-просмотра, и, возможно, даже 3. Создайте PR для Consolidation.js, чтобы добавить поддержку Marko, чтобы другие могут наслаждаться:)
Варианты 1 и 2 будут выглядеть примерно так:
var express = require('express');
var app = express();
var fs = require('fs');
var marko = require('marko');
// Option 2
app.engine('marko', function(filePath, options, callback) {
marko.load(filePath).render(options, function(err, output) {
callback(null, output);
});
});
app.set('views', './views');
app.set('view engine', 'marko');
app.get('/viewengine', function(req, res) {
res.render('hello', {
name: 'Frank'
});
});
// Option 1
var template = marko.load(require.resolve('./views/hello.marko'));
app.get('/marko', function(req, res) {
template.stream({
name: 'Frank'
})
.pipe(res);
});
var server = app.listen(3000, function() {
var host = server.address().address;
var port = server.address().port;
console.log('Example app listening at http://%s:%s', host, port);
});
Обновить:
когда я отвечаю вам, это 2019-9-13, и я использую node v10 LTS, поэтому мой ответ будет немного отличаться от последнего в соответствии с документами, но в настоящее время он работает нормально...
На самом деле нам не нужно настраивать шаблонизатор для marko, потому что они добавили некоторые модули, чтобы мы могли подключиться к Express. это лучший способ, предложенный в документации.
npm install express --save
npm install marko --save
после этого создайте файл app.js и сделайте следующее:
"use strict";
require("marko/node-require"); // Allow Node.js to require and load `.marko` files
let express = require("express");
let path = require("path");
let markoExpress = require("marko/express");
let template = require("./views/index.marko");
let app = express();
app.set("views", path.join(__dirname, "views"));
app.use(markoExpress()); //enable response.marko(template, data)
app.get("/", (request, response) => {
response.marko(template);
});
app.listen(5000);
после этого создайте файл шаблона в своем каталоге просмотра, который в данном случае ./views/index.marko
и писать:
$ const name = "world";
<h1>Hello ${name}!</h1>
это простое приложение hello world с node, express и marko