无法查找视图

时间:2015-01-04 08:41:08

标签: node.js express handlebars.js

您好我正在尝试使用车把使用Express 3。但我无法查看视图"我遇到了这个错误。

Error: Failed to lookup view "500" in views directory
"d:\projects\meadowlark\site\views"    at EventEmitter.app.render
(d:\projects\meadowlark\site\node_modules\express\lib\application.js:519:17)
at ServerResponse.res.render
(d:\projects\meadowlark\site\node_modules\express\lib\response.js:904:7)
at d:\projects\meadowlark\site\meadowlark.js:29:7    at
Layer.handle_error
(d:\projects\meadowlark\site\node_modules\express\lib\router\layer.js:58:5)
at trim_prefix
(d:\projects\meadowlark\site\node_modules\express\lib\router\index.js:269:13)
at
d:\projects\meadowlark\site\node_modules\express\lib\router\index.js:238:9
at Function.proto.process_params
(d:\projects\meadowlark\site\node_modules\express\lib\router\index.js:313:12)
at
d:\projects\meadowlark\site\node_modules\express\lib\router\index.js:229:12
at Function.match_layer
(d:\projects\meadowlark\site\node_modules\express\lib\router\index.js:296:3)
at next
(d:\projects\meadowlark\site\node_modules\express\lib\router\index.js:190:10)

对我来说真的很奇怪。任何人都可以向我解释这个问题我该如何解决?

我的js代码如下:

var express = require('express');
var app = express();
// set up handlebars view engine
var handlebars = require('express3-handlebars')
.create({ defaultLayout:'main' });
app.engine('handlebars', handlebars.engine);
app.set('view engine', 'handlebars');

app.set('port',process.env.port || 3000);

    app.get('/', function(req, res) {
        res.render('home');
    });

    app.get('/about', function(req, res) {
        res.render('about');
    });

// 404 catch-all handler (middleware)
    app.use(function(req, res, next){
        res.status(404);
        res.render('404');
    });

// 500 error handler (middleware)
    app.use(function(err, req, res, next){
        console.error(err.stack);
        res.status(500);
        res.render('500');
    });

app.listen(app.get('port'),function(){
    console.log('Express started on http://localhost: '+ app.get('port') + " Press CTRL+C to terminate.");
});

3 个答案:

答案 0 :(得分:3)

我想我知道这里的问题是什么,请记住O'Reilly书中的app.js设置(“使用Node& Express进行Web开发”)。 以下是作者未能澄清的内容:

如果.handlebars中有views/layouts/个模板文件,请构建您的视图引擎设置:

var path = require('path');
var express = require('express');
var handlebars = require('express-handlebars'); // 'express3-handlebars' has been deprecated
var app = express();

// Set up handlebars view engine
app.set('views', path.join(__dirname, 'views/layouts/'));
app.engine('handlebars', handlebars({defaultLayout: 'main'}));
app.set('view engine', 'handlebars');

请注意,您需要var path = require('path');才能将“观看次数”设置为文件路径views/layouts/

答案 1 :(得分:0)

如果您阅读错误,它会清楚地告诉您在模板目录中缺少500个视图模板。我不确定您的目录结构是什么,但将500.handlebars文件放在404.handlebars文件所在的同一目录中。应该在views/views/layouts目录中的某个位置。

答案 2 :(得分:0)

确保您的文件:home.handlebars,about.handlebars,404.handlebars,500.handlebars和main.handlebars 没有隐藏的扩展程序。像这样:home.handlebars.html,about.handlebars.html,404.handlebars.html,500.handlebars.html和main.handlebars.html。

如果他们这样做,删除这些扩展程序并仅使用.handlebars扩展程序就可以解决此问题。