错误:无法在Express中查找视图

注意 :我的自动答复在post结尾

我试图让nodeJS更好的体验,我真的不喜欢在一个文件中获得所有的脚本。

所以,在这里我使用这个结构后

./ config/ enviroment.js routes.js public/ css/ styles.css images views index index.jade section 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'); //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.jade

 h1 algoa 

我得到的错误是:

错误:无法在render(c:\ xampp \ htdocs)上的Function.render(c:\ xampp \ htdocs \ nodejs \ bus \ node_modules \ express \ lib \ application.js:495:17)查看视图“index / index” \ nodejs \ bus \ node_modules \ express \ lib \ response.js:614:9)at ServerResponse.render(c:\ xampp \ htdocs \ nodejs \ bus \ node_modules \ express \ lib \ response.js:638:5)at (c:\ xampp \ htdocs \ nodejs \ bus \ node_modules \ express \ lib \ router \ index.js:177:11):c:\ xampp \ htdocs \ nodejs \ bus \ config \ routes.js: (c:\ xampp \ htdocs \ nodejs \ bus \ node_modules \ express \ lib \ bin)中的参数(c:\ xampp \ htdocs \ nodejs \ bus \ node_modules \ express \ lib \ router \ index.js:151:11)在Router._dispatch(c:\ xampp \ htdocs \ nodejs \ bus \ node_modules \ express \ lib \ router \ index.js:185:4)在Object.router [作为句柄] (c:\ xampp \ htdocs \ nodejs \ bus \ node_modules \ express \ node_modules \ connect \ n)下创build(c:\ xampp \ htdocs \ nodejs \ bus \ node_modules \ express \ lib \ router \ index.js:45:10) LIB \ proto.js:191:15)

但我真的不知道是什么问题…

我开始思考是因为模块出口…

答:远离我发现的独特解决scheme是改变我定义的app.set('views')和视图引擎的位置

我把它移动到app.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()replaceexpress.createServer() express()

更新:

这是你的来自environment.js的__dirname
它应该是:

 app.use(express.static(__dirname + '../public')); 

添加到@ mihai的答案:

如果您在Windows中,那么只是连接__dirname' + '../public' c:\dev\app\module../public __dirname' + '../public'将导致错误的目录名称(例如: c:\dev\app\module../public )。

而是使用path ,这将工作,不pipe操作系统。

 var path = require ('path'); app.use(express.static(path.join(__dirname + '.../public'))); 

path.join将标准化path分隔符,并将返回正确的path值。

检查你是否使用了正确的视图引擎。 在我的情况下,我更新了npm,并最终将引擎更改为'hjs'(我试图卸载玉来使用哈巴狗)。 所以从app.js文件中的hjs将它改为jade就可以了。

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

使用此代码来解决问题

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

只是注意到我已经命名我的文件' index.html'而不是'index.html'的领先空间。 这就是为什么找不到它。

我起初有同样的错误,我真的很烦。 你只需要在模板path之前有./

 res.render('./index/index'); 

希望它的工作,为我工作。

我将视图文件夹名称更改为views_render,同样面临与上面相同的问题,所以重新启动server.js,它适用于我。