Node.js nodejs车把';TypeError:this.engine不是函数';
我尝试在Express中使用把手模板。我收到以下错误消息: TypeError:此.engine不是函数 在View.render(/home/ubuntu/workspace/node_modules/express/lib/View.js:128:8) 使用此代码:Node.js nodejs车把';TypeError:this.engine不是函数';,node.js,express,handlebars.js,render,Node.js,Express,Handlebars.js,Render,我尝试在Express中使用把手模板。我收到以下错误消息: TypeError:此.engine不是函数 在View.render(/home/ubuntu/workspace/node_modules/express/lib/View.js:128:8) 使用此代码: 'use strict'; var express = require('express'); var expressHandlebars = require('express-handlebars'); var app
'use strict';
var express = require('express');
var expressHandlebars = require('express-handlebars');
var app = express();
app.engine('handlebars', expressHandlebars({defaultLayout: 'layout'}));
app.set('view engine', 'html');
app.use(express.static('views'));
app.route('/single/:id')
.get(function (req, res) {
res.render(process.cwd() + `/public/single-poll`, {
id: req.params.id
});
});
app.listen(process.env.PORT, function () {
console.log('Node.js listening on port ' + process.env.PORT + '...');
});
当我用sendFile()替换render()函数时,效果很好。我知道和,但他们没有帮我
可能是什么问题?由于您的把手模板文件保存为
.html
,因此您应该将引擎注册为'html'
,而不是'handlebar'
:
app.engine('html', expressHandlebars({defaultLayout: 'layout', extname: '.html', layoutsDir: 'public/'}));
app.set('view engine', 'html');
app.set('views', 'public/');
// ...
res.render('single-poll', ...);
您的项目目录应该如下所示(我希望):
找到所有需要更改的内容后,我真的建议您坐下来,因为我建议的所有内容都是现成的。感谢@Patrick Roberts关于阅读手册的评论,我重新编写了它,它就是这样工作的:
'use strict';
var express = require('express');
var exphbs = require('express-handlebars');
var app = express();
app.engine('handlebars', exphbs({defaultLayout: 'main'}));
app.set('view engine', 'handlebars');
app.route('/single/:id')
.get(function (req, res) {
res.render('single-poll', {
id: req.params.id
});
});
app.listen(process.env.PORT, function () {
console.log('Node.js listening on port ' + process.env.PORT + '...');
});
我认为,主要是将文件结构更改为:
├── app.js
└── views
├── single-poll.handlebars
└── layouts
└── main.handlebars
尝试从
res.render()
调用中删除文件扩展名。这能解决问题吗?不,不能。
├── app.js
└── views
├── single-poll.handlebars
└── layouts
└── main.handlebars