72

:投稿の最後に私の自動応答

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);

環境.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());
    });

};

ルート.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');
    });

};

レイアウト.ジェイド

!!! 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) で 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)パラメーター (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\router\index.js:151:11) でパス (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) の Object.router [ハンドルとして] (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);

この背後にあるロジックはよくわかりませんが、あると思います。

4

17 に答える 17

41

@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はパス区切り文字を正規化し、正しいパス値を返します。

于 2012-08-28T21:10:16.740 に答える
35

npm install express@2.5.9役立つ場合は、以前のバージョンをインストールします。

3.x でビュー レイアウト メカニズムが削除されたことは知っていますが、これは問題ではないかもしれません。またexpress.createServer()express()

アップデート:

これは、environment.js の __dirname です。次のよう
にする必要があります。

app.use(express.static(__dirname + '../public'));
于 2012-04-18T19:45:38.133 に答える
3

適切なビュー エンジンを使用しているかどうかを確認します。私の場合、npmを更新し、エンジンを「hjs」に変更することになりました(パグを使用するためにジェイドをアンインストールしようとしていました)。したがって、app.jsファイルのhjsからjadeに変更するとうまくいきました。

 app.set('view engine','jade'); 
于 2016-09-07T04:40:23.677 に答える
1

このコードを使用して問題を解決してください

app.get('/', function(req, res){
    res.render("index");
});
于 2016-09-01T12:58:39.187 に答える
1

' index.html'代わりに'index.html'先頭にスペースを付けてファイルに名前を付けたことに気付きました。それが、それを見つけることができなかった理由です。

于 2017-02-26T16:34:34.923 に答える
0

ビューのフォルダー名を views_render に変更し、上記と同じ問題に直面しているため、server.js を再起動するとうまくいきます。

于 2016-07-08T18:23:38.497 に答える