1

我对 Node & Express 比较陌生,但是我以前从未使用过的把手模板并尝试在我的节点 app.js 中引用它们,但我不断收到以下错误

对象 # 的属性“引擎”不是函数

这是我的代码:

app.configure(function () {
        app.set('views', __dirname+ '/views');
        app.set('port', 3000);
        app.set('view engine', 'handlebars');
        app.use(handlebarsLayout);
        app.use(express.static(path.join(__dirname, 'public')));
        app.use(app.router);
    });

    // ROUTES
    app.get('/', function (req, res){ 
        var data = {
            title: "Node + Handlebars",
            body: "Hello World!"
        }

        res.render('index', data);
    });

    http.createServer(app).listen(app.get('port'), function () {
        console.log("Express server listening on port " + app.get('port'));
    });

任何帮助将不胜感激。

谢谢,汤姆

4

2 回答 2

6

对于任何感兴趣的人,我发现这篇文章非常有用并帮助解决了我的问题。

https://stackoverflow.com/a/14346094/911553

我安装了 consolidate (npm install consolidate) 并执行了以下操作:

var engines = require('consolidate')

app.configure(function () {
        app.set('views', __dirname+ '/views');
        app.set('port', AppConfig.AppConfig.Express.PORT);

        app.set('view engine', 'html');
        app.set("view options", { layout: true });
        app.engine('.html', engines.handlebars);
        app.use(app.router);
    });

// ROUTES
    app.get('/', function (req, res){ 
        var data = {
            title: "Node + Handlebars",
            body: "Hello World!"
        }

        res.render('index', data);
    });    

现在我的页面使用把手模板呈现。

于 2013-07-18T09:41:54.017 回答
0

您需要将模板和助手的目录传递给应用程序。在顶部声明你的 js。

var helpers = require('./private/js/myhelpers');

然后在你的 app.configure 中:

// configure express
app.configure(function() {
     //handlebars implementation
     app.set('views', __dirname + '/views');
     app.set('view engine', 'handlebars');
     //handlebars helpers are registered in app.engine, helpers is our hbs.js file
     app.engine('handlebars', exphbs({defaultLayout: 'main', helpers: helpers}));
 ...
 });
于 2014-05-01T12:44:44.987 回答