注意:我在帖子末尾的自动回答
我正在尝试更好地体验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
我得到的错误是:
错误:无法查找视图“index / index” 在Function.render(c:\ xampp \ htdocs \ nodejs \ _bus \ node_modules \ express \ lib \ application.js:495:17) 在渲染(c:\ xampp \ htdocs \ nodejs \ _bus \ node_modules \ express \ lib \ response.js:614:9) 在ServerResponse.render(c:\ xampp \ htdocs \ nodejs \ _bus \ node_modules \ express \ lib \ response.js:638:5) 在c:\ xampp \ htdocs \ nodejs \ _bus \ config \ routes.js:4:7 在回调(c:\ xampp \ htdocs \ nodejs \ _bus \ node_modules \ express \ lib \ router \ index.js:177:11) 在param(c:\ xampp \ htdocs \ nodejs \ _bus \ node_modules \ express \ lib \ router \ index.js:151:11) 传递(c:\ xampp \ htdocs \ nodejs \ _bus \ node_modules \ express \ lib \ router \ index.js:158:5) 在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 \ lib \ router \ index.js:45:10) 在下一个(c:\ xampp \ htdocs \ nodejs \ _bus \ node_modules \ express \ node_modules \ connect \ lib \ proto.js:191:15)
但我真的不知道问题是什么......
我开始想的是因为模块导出......
答案: 我找到的独特解决方案是更改我定义的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);
我真的不明白这背后的逻辑,但我会说它有一个。
答案 0 :(得分:33)
添加到@mihai的回答:
如果你在Windows中,那么只是连接__dirname' + '../public'
会导致错误的目录名称(例如:c:\dev\app\module../public
)。
而是使用path
,无论操作系统如何都可以使用。
var path = require ('path');
app.use(express.static(path.join(__dirname + '.../public')));
path.join将规范化路径分隔符,并返回正确的路径值。
答案 1 :(得分:30)
npm install express@2.5.9
会安装以前的版本。
我知道在3.x中删除了视图布局机制,但这可能不是你的问题。同时将express.createServer()
替换为express()
这是来自environment.js的__dirname 它应该是:
app.use(express.static(__dirname + '../public'));
答案 2 :(得分:5)
起初我有同样的错误,我真的很生气。
你只需要在模板路径之前有./
res.render('./index/index');
希望它有效,为我工作。
答案 3 :(得分:4)
通过在app.js文件中添加以下代码来解决该问题
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');
app.set('views', __dirname);
app.get('/', function(req, res){
res.render("index");
});
答案 4 :(得分:2)
检查您是否使用了正确的视图引擎。 在我的情况下,我更新了npm并最终将引擎更改为' hjs'(我试图卸载jade以使用pug)。 因此,将它从app.js文件中的hjs更改为jade对我来说很有用。
app.set('view engine','jade');
答案 5 :(得分:1)
使用此代码解决问题
app.get('/', function(req, res){
res.render("index");
});
答案 6 :(得分:1)
注意到我已将' index.html'
的文件命名为'index.html'
,但前导空格为declare module "react-leaflet" {
class MapLayer {
...
}
}
。这就是为什么找不到它。
答案 7 :(得分:1)
由于文件名区分大小写,因此基本上可以看到此问题。 例如,如果您将文件另存为index.jadge,而不是其路径上的鬃毛,则在Windows中应该为“ index”而不是“ Index”,但是可以,但是在像服务器这样的linux系统中,则会产生问题。
1)(如果文件名为 index.jadge
)app.get('/', function(req, res){
res.render("index");
});
2)(如果文件名为 Index.jadge
)app.get('/', function(req, res){
res.render("Index");
});
答案 8 :(得分:1)
对于我来说,我可以通过以下方法解决它:
app.set('views', `${__dirname}/views`);
app.use(express.static(`${__dirname}/public`));
我需要从node app.min.js
文件夹中启动/dist
。
我的文件夹结构是:
答案 9 :(得分:0)
我将views文件夹名称更改为views_render,并且还面临与上面相同的问题,因此重新启动server.js并且它适用于我。
答案 10 :(得分:0)
这个错误实际上只与文件Path有关,那就是你需要检查的一切,对我来说,我的父文件夹是" Layouts"但我的实际文件是layout.html
,我的路径都有布局,一旦我纠正错误消失了。
答案 11 :(得分:0)
我遇到了同样的问题,可以使用dougwilson的解决方案解决:2017年4月5日,Github。
index.js
更改为index.pug
'/'
路由中使用:res.render('index.pug')
-代替res.render('index')
DEBUG=express:view
现在它就像一种魅力。答案 12 :(得分:0)
您可以将路径设置为这样的常量,然后使用express进行设置。
const viewsPath = path.join(__dirname, '../views')
app.set('view engine','hbs')
app.set('views', viewsPath)
app.get('/', function(req, res){
res.render("index");
});
这对我有用
答案 13 :(得分:0)
我在Linux上也遇到了这个问题
I had the following
res.render('./views/index')
I changed it too
res.render('../views/index')
现在一切正常。
答案 14 :(得分:0)
我遇到了同样的问题。然后只需检查资源管理器中的文件目录。有时视图文件夹不存在。