错误:无法在Express中查看视图 [英] Error: Failed to lookup view in Express
问题描述
注意:我的帖子结束后的自动回复
我正在尝试更好地体验nodeJS,我真的很想把所有的脚本都放在一个文件中。
所以,在这里发贴后,我使用这个结构
./
config /
enviroment.js
routes.js
public /
css /
样式.css
图片
视图
索引
index.jade
部分
index.jade
layout.jade
app.js
我的文件现在是:
app.js
var express = require('express');
var app = module.exports = express.createServer();
require('./ config / enviroment.js')(app,express);
require('./ config / routes.js')(app);
app.listen(3000);
enviroment.js
module.exports = function(app,express){
app.configure(function(){
app.use(express.logger()) ;
app.use(express.static(__ dirname +'/ public'));
app.set('views',__dirname +'/ views');
app.set 'view engine','jade'); // views of views
});
//开发配置
app.configure('development',function(){
app.use(express.errorHandler({
dumpExceptions:true,
showStack:true
}));
});
//生产配置
app.configure('production',function(){
app.use(express.errorHandler());
});
};
routes.js
module.exports = function(app){
app.get(['/','/ index','/ inicio'], function(req,res){
res.render('index / index');
});
app.get('/ test',function(req,res){
//res.render('index/index');
});
};
layout.jade
!!! 5
html
头
链接(rel ='stylesheet',href ='/ css / style.css')
标题Express + Jade
body
#main
h1内容到这里
#container!= body
index / index.jade
h1 algoa
pre>
我得到的错误是:
错误:无法查看视图index / index
在Function.render(c:\xampp\htdocs\\\
odejs\buses\\\
ode_modules\express\lib\application.js:495:17)
在render(c:\xampp\htdocs\\\
odejs\buses\\\
ode_modules\express\lib\response.js:614:9)
在ServerResponse.render(c:\ xampp\htdocs\\\
odejs\buses\\\
ode_modules\express\lib\response.js:638:5)
在c:\xampp\htdocs\\\
odejs\buses\ config \routes.js:4:7
在回调(c:\xampp\htdocs\\\
odejs\buses\\\
ode_modules\express\lib\router\index.js:177:11)
在param(c :\xampp\htdocs\\\
odejs\buses\\\
ode_modules\express\lib\router\index.js:151:11)
at pass(c:\xampp\htdocs \\\
odejs\buses\\\
ode_modules\express\lib\router\index.js:158:5)
在Router._dispatch(c:\xampp\htdocs\\\
odejs\ bus\\\
ode_modules\express\lib\router\index.js:185:4)
在Object.router [as handle](c:\xampp\htdocs\\\
odejs\buses \\\
ode_modules\express\lib\router\index.js:45:10)
在下一个(c:\xampp\htdocs\\\
odejs\buses\\\
ode_modules\express\\ \\ node_modules\connect\lib\proto.js:191:15)
但我真的不知道是什么问题...
我开始思考是因为模块导出...
答案:
远离我发现的唯一解决方案是更改我定义的app.set('views')和视图引擎的位置
我把它移动到了应用程序。 js,现在工作得很好。
var express = require('express');
var app = module.exports = express.createServer();
require('./ config / enviroment.js')(app,express);
app.set('views',__dirname +'/ views');
app.set('view engine','jade');
require('./ config / routes.js')(app);
app.listen(3000);
我真的不明白这个背后的逻辑,但我会认为它有一个。 >
解决方案
npm install express@2.5.9
安装以前的版本,如果它有帮助
我在3.x中知道视图布局技工已被删除,但这可能不是您的问题。也可以用
express() c
$ / code code code code code code code $ c $ h3>更新:
这是你的__dirname from environment.js
应该是:app.use(express.static(__ dirname +'../public'));
Note: my auto answer at end of the post
I'm trying to make a better experience of nodeJS and i don't really like to get all the script in one file.
so, following a post here i use this structure
./ config/ enviroment.js routes.js public/ css/ styles.css images views index index.jade section index.jade layout.jade app.js
My files are right now:
app.js
var express = require('express'); var app = module.exports = express.createServer(); require('./config/enviroment.js')(app, express); require('./config/routes.js')(app); app.listen(3000);
enviroment.js
module.exports = function(app, express) { app.configure(function() { app.use(express.logger()); app.use(express.static(__dirname + '/public')); app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); //extension of views }); //development configuration app.configure('development', function() { app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); }); //production configuration app.configure('production', function() { app.use(express.errorHandler()); }); };
routes.js
module.exports = function(app) { app.get(['/','/index', '/inicio'], function(req, res) { res.render('index/index'); }); app.get('/test', function(req, res) { //res.render('index/index'); }); };
layout.jade
!!! 5 html head link(rel='stylesheet', href='/css/style.css') title Express + Jade body #main h1 Content goes here #container!= body
index/index.jade
h1 algoa
The error i get is:
Error: Failed to lookup view "index/index" at Function.render (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\application.js:495:17) at render (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\response.js:614:9) at ServerResponse.render (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\response.js:638:5) at c:\xampp\htdocs\nodejs\buses\config\routes.js:4:7 at callbacks (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\router\index.js:177:11) at param (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\router\index.js:151:11) at pass (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\router\index.js:158:5) at Router._dispatch (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\router\index.js:185:4) at Object.router [as handle] (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\router\index.js:45:10) at next (c:\xampp\htdocs\nodejs\buses\node_modules\express\node_modules\connect\lib\proto.js:191:15)
But i don't really know what is the problem...
I'm starting thinking is because the modules exports...
Answer: Far away the unique solution i found is to change the place i defined app.set('views') and views engine
I moved it to the app.js and now is working well.
var express = require('express'); var app = module.exports = express.createServer(); require('./config/enviroment.js')(app, express); app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); require('./config/routes.js')(app); app.listen(3000);
I don't really understand the logic behind this but i gonna supose it have one.
解决方案
npm install express@2.5.9
installs the previous version, if it helps.I know in 3.x the view layout mechanic was removed, but this might not be your problem. Also replace
express.createServer()
withexpress()
Update:
It's your __dirname from environment.js
It should be:app.use(express.static(__dirname + '../public'));
这篇关于错误:无法在Express中查看视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!