nodejs handlebars:' TypeError:this.engine不是一个函数'

时间:2017-06-22 18:43:19

标签: node.js express handlebars.js render

我尝试在Express中使用把手模板。我收到此错误消息:

  

TypeError:this.engine不是函数       在View.render(/home/ubuntu/workspace/node_modules/express/lib/view.js:128:8)......

使用此代码:

if passadefinir == passadefinir2:
    maindb.execute("DELETE FROM Password WHERE ID = 'not'")
    maindb.execute("INSERT INTO Password(ID) VALUES ('set')")
    encriptacao = hashlib.sha1(passadefinir2.encode())
    encriptado = (encriptacao.hexdigest(),)
    maindb.execute("INSERT INTO Password(Password) VALUES (?)" (encriptado,))
    conn.commit()

当我用sendFile()替换render()函数时工作正常。我了解Express js render : TypeError: this.engine is not a functionExpress js render error this.engine is not a function以及TypeError: this.engine is not a function when trying to use Moustache in Express JS,但他们对我没有帮助。

可能是什么问题?

2 个答案:

答案 0 :(得分:2)

由于您的把手模板文件保存为.html,因此您应将引擎注册为'html'而不是'handlebars'

app.engine('html', expressHandlebars({defaultLayout: 'layout', extname: '.html', layoutsDir: 'public/'}));
app.set('view engine', 'html');
app.set('views', 'public/');

// ...
res.render('single-poll', ...);

您的项目目录应如下所示(我希望):

├── app.js
└── public
    ├── layout.html
    └── single-poll.html

在找到你需要改变的所有事情后,我真的建议你坐下来read the ******* manual,因为我所建议的一切都在那里。

答案 1 :(得分:0)

感谢@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