如何在expressjs 4.0中设置marko模板引擎

时间:2015-04-19 15:56:40

标签: node.js express template-engine marko

我想使用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 [as 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 [as handle_request](E:\ nodeleap \ node_modules \ express \ lib \ router \ layer.js:78:12)

2 个答案:

答案 0 :(得分:2)

快递视图引擎尚未支持marko(请参阅此处:https://github.com/tj/consolidate.js

编辑但Marko常见问题解答建议不要使用快速查看引擎。下面的选项1应该有效。

所以我看到了一些选项,1。只需在每条路线中直接使用marko渲染模板,或者2.设置自己的快速视图引擎,甚至可以3.制作PR来整合.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);
});

答案 1 :(得分:0)

更新:

我在2019-9-13回答您,并且我正在使用节点v10 LTS,所以我的回答与对docs的最后一个一致有点不同,但是目前可以很好...

实际上,我们不需要为marko设置模板引擎,因为它们添加了一些模块供我们连接到express。这是documention建议的最佳方法。

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