我想使用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)
答案 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