错误:无法在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,它适用于我。