【问题标题】:500 Error: Failed to lookup view "index" in views directory500 错误:无法在视图目录中查找视图“索引”
【发布时间】:2015-05-12 13:48:54
【问题描述】:

我拿起一本关于使用 MongoDB 和 Node.js 进行 Web 开发的书。我已经到了我的代码无法正常工作的地步,我觉得从这本书的内容来看,我的一切都是正确的。现在我收到此错误:

Connect
500 Error: Failed to lookup view "index" in views directory "C:\imageUploadProject/views"
   at EventEmitter.app.render (C:\imageUploadProject\node_modules\express\lib\application.js:555:17)
   at ServerResponse.res.render (C:\imageUploadProject\node_modules\express\lib\response.js:938:7)
   at module.exports.index (C:\imageUploadProject\controllers\home.js:5:7)
   at Layer.handle [as handle_request] (C:\imageUploadProject\node_modules\express\lib\router\layer.js:82:5)
   at next (C:\imageUploadProject\node_modules\express\lib\router\route.js:110:13)
   at Route.dispatch (C:\imageUploadProject\node_modules\express\lib\router\route.js:91:3)
   at Layer.handle [as handle_request] (C:\imageUploadProject\node_modules\express\lib\router\layer.js:82:5)
   at C:\imageUploadProject\node_modules\express\lib\router\index.js:267:22
   at Function.proto.process_params (C:\imageUploadProject\node_modules\express\lib\router\index.js:321:12)
   at next >(C:\imageUploadProject\node_modules\express\lib\router\index.js:261:10)

我在指定路径中有一个索引文件。这是我的文件结构:

>-controllers
>>>+home.js

>>>+image.js

>-helpers

>-node_modules

>>>Needed modules and such. Won't bore you with all the ones installed. Let me know if there is something in here you would like to see.

>-public

>-server

>>>+configure.js

>>>+routes.js

>-views

>>>-layouts

>>>>>>+main.handlebars

>>>-partials

>>>>>>+comments.handlebars

>>>>>>+popular.handlebars

>>>>>>+stats.handlebars

>>>+image.handlebars

>>>+index.handlebars

>package.json

>server.js

还有我觉得可能有问题的文件代码。

server.js

// JavaScript Document
var express = require('express'),
config = require('./server/configure'),
app = express();

app.set('port', process.env.PORT || 3300);
app.set('views', __dirname + '/views');
app = config(app);

var server = app.listen(app.get('port'), function() {
    console.log('Server up: http://localhost:' + app.get('port'));  
});

configure.js

// JavaScript Document
var path = require('path'),
routes = require('./routes'),
exphbs = require('express3-handlebars'),
express = require('express'),
bodyParser = require('body-parser'),
cookieParser = require('cookie-parser'),
morgan = require('morgan'),
methodOverride = require('method-override'),
errorHandler = require('errorhandler');
moment = require('moment');

module.exports = function(app) {

app.engine('handlebars', exphbs.create({
    defaultLayout: 'main',
    layoutsDir: app.get('views') + '/layouts',
    partialsDir: [app.get('views') + '/partials'],
    helpers: {
        timeago: function(timestamp) {
            return moment(timestamp).startOf('minute').fromNow();
        }
    }
}).engine);

app.set('view engine', 'handlebars');

app.use(morgan('dev'));

app.use(bodyParser({
    uploadDir:path.join(__dirname, '.../public/upload/temp')
}));

app.use(methodOverride());

app.use(cookieParser('some-secret-value-here'));

routes.initialize(app, new express.Router());

app.use('/public/', express.static(path.join(__dirname, '.../public')));

if('development' === app.get('env')) {  
    app.use(errorHandler());
}

return app;
};

routes.js

// JavaScript Document

var home = require('../controllers/home'),
image = require('../controllers/image');

module.exports.initialize = function(app, router) {
router.get('/', home.index);
router.get('/images/:image_id', image.index);

router.post('/images', image.create);
router.post('/images/:image_id/like', image.like);
router.post('/images/:image_id/comment', image.comment);

app.use('/', router);   
}

home.js

// JavaScript Document

module.exports = {
index: function(req, res) {
    res.render('index');    
}
};

image.js

// JavaScript Document

module.exports = {
index: function(req, res) {
    res.render('image');    
},
create: function(req, res) {    
    res.send('The image:create POST controller');
},
like: function(req, res) {
    res.send('The image:like POST controller');
},
comment: function(req, res) {
    res.send('The image:comment POST controller');  
}
};

如果您还想查看其他文件,请告诉我。在多次阅读这本书后,我不确定如何从这里开始。我唯一能想到的是 Express 3.5.X 和 Express 4.0 之间存在一些脱节。这本书涵盖了如何将 server.js、configure.js 和 route.js 转换为 Express 4.0。但是,我想知道我在其他可能不符合 4.0 的文件中是否做错了什么。

【问题讨论】:

    标签: javascript node.js express


    【解决方案1】:

    尝试在您的 server.js 文件中执行此操作

    app.set('views', path.join(__dirname, 'views'));
    

    【讨论】:

    • 这在尝试启动服务器时给了我一堆错误。 "在 imageUploadProject@1.0.0 启动脚本 'node server.js' 失败。
    【解决方案2】:

    这很尴尬。我正在输入“index.handlebars”来保存我的文件。但是,他们并没有将它们保存为 HANDLEBARS 文件,它们仍然以某种方式保存为 html 文档。我将所有文件更改为正确的文件类型,现在一切正常...不知道为什么一开始没有正确保存它们,可以发誓我已经正确设置了 XD 感谢所有查看此内容的人。

    【讨论】:

      猜你喜欢
      • 2021-06-26
      • 2021-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-26
      • 2016-01-27
      • 2020-08-08
      • 2022-11-30
      相关资源
      最近更新 更多