注:投稿の最後の自動応答
私はnodeJSのより良い体験をしようとしていますが、すべてのスクリプトを1つのファイルに入れるのは本当に好きではありません。
だから、ここの投稿に従ってこの構造を使用します
./
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/index.jade
h1 algoa
私が得るエラーは:
エラー:レンダリング(c:\ xampp\htdocs)でFunction.render(c:\ xampp\htdocs\nodejs\buses\node_modules\express\lib\application.js:495:17)でビュー「index/index」を検索できませんでした\ 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) c:\ xampp\htdocs\nodejs\buses\config\routes.js:4:7コールバック(c:\ xampp\htdocs\nodejs\buses\node_modules\express\lib\router\index.js:177:11) 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)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)次に(c:\ xampp\htdocs\nodejs\buses\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);
私はこの背後にあるロジックを本当に理解していませんが、それがあると思います。
npm install [email protected]
は、以前のバージョンをインストールします(それが役立つ場合)。
3.xでは、ビューレイアウトメカニズムが削除されましたが、これは問題ではないかもしれません。また、express.createServer()
をexpress()
に置き換えます
Environment.jsからの__dirnameです
そのはず:
app.use(express.static(__dirname + '../public'));
@mihaiの答えに追加:
Windowsを使用している場合は、__dirname' + '../public'
を連結するだけで、間違ったディレクトリ名になります(例:c:\dev\app\module../public
)。
代わりに、path
を使用します。これは、OSに関係なく機能します。
var path = require ('path');
app.use(express.static(path.join(__dirname + '.../public')));
path.join は、パス区切り文字を正規化し、正しいパス値を返します。
最初は同じエラーがあり、本当にイライラしていました。テンプレートへのパスの前に./
が必要です
res.render('./index/index');
うまくいけば、私のために働いた。
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");
});
適切なビューエンジンを使用しているかどうかを確認します。私の場合、npmを更新し、エンジンを「hjs」に変更することになりました(jagをアンインストールしてpugを使用しようとしました)。したがって、app.jsファイルでhjsからjadeに変更するとうまくいきました。
app.set('view engine','jade');
このコードを使用して問題を解決します
app.get('/', function(req, res){
res.render("index");
});
この問題は、基本的に大文字と小文字が区別されるファイル名が原因で発生します。たとえば、ルート上のたてがみよりもファイルをindex.jadgeとして保存する場合、Windowsでは「インデックス」ではなく「インデックス」である必要がありますが、Linuxのようなサーバーでは問題が発生します。
1)ファイル名がindex.jadgeの場合
app.get('/', function(req, res){
res.render("index");
});
2)ファイル名がIndex.jadgeの場合
app.get('/', function(req, res){
res.render("Index");
});
' index.html'
の代わりに先頭にスペースを付けて、ファイルに'index.html'
という名前を付けたことに注意してください。それが見つからなかった理由です。
パスをこのような定数に設定し、エクスプレスを使用して設定できます。
const viewsPath = path.join(__dirname, '../views')
app.set('view engine','hbs')
app.set('views', viewsPath)
app.get('/', function(req, res){
res.render("index");
});
これは私のために働いた
私は同じ問題を抱えていましたが、ダグウィルソンのソリューションで修正できました:2017年4月5日、 Github 。
index.js
からindex.pug
に変更しました'/'
ルートで使用されます:res.render('index.pug')
の代わりにres.render('index')
-DEBUG=express:view
これで、チャームのように機能します。私は、viewsフォルダ名をviews_renderに変更し、上記と同じ問題に直面しているため、server.jsを再起動してください。
Linuxでもこの問題が発生しました
I had the following
res.render('./views/index')
I changed it too
res.render('../views/index')
すべてが現在機能しています。
このエラーは実際にファイルのパスに関係しています。確認する必要があるのは、親フォルダが「レイアウト」でしたが、実際のファイルはlayout.html
でした。エラーはなくなりました。