1. ホーム
  2. node.js

[解決済み] エラーです。Expressでビューの検索に失敗しました

2022-02-02 04:42:54

質問

備考 : 記事末尾の私の自動回答

私は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());
    });

};

ルーティング.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');
    });

};

レイアウト.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" at Function.render (c:╱╱Modules╱Expresslib╱application.js:495:17) at render (c:╱ㅂ╱)╱̑̑̑ グッ ! at ServerResponse.render (c:⽯⽯⽯Node_buses3↩node_modules ⽯表記):638:5) at c:⽯⽯⽯コンフィグ⼭ルート.js:4:7 at callbacks (c:⽯⽯⽯node_modules_express⽯router_index.js:177:11) at param (c: \xampphtdocs﹑node_modules﹑express﹑librouter﹑index.js:151:11) at pass (c:╱ㅂ╱)╱̑̑̑ グッ ! at Router._dispatch (c:╱ㅂ╱)و ̑̑̑ グッ ! at Object.router [as handle] (c:╱ㅂ╱)╱̑̑ グッ ! at next (c:\xamppjsbusesnode_modules_expressnode_modules_connectlib_proto.js:191:15)

でも、何が問題なのかよくわからない......。

モジュールのエクスポートが原因ではないかと思い始めています...。

回答 私が見つけたユニークな解決策は、app.set('views')とviews engineを定義する場所を変更することでした。

私はそれを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);

私はこの背後にあるロジックを本当に理解していないが、私はそれが1つを持っていると仮定します。

どのように解決するのですか?

npm install [email protected] は以前のバージョンをインストールします。

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

アップデートする

environment.jsの__dirnameです。
であるべきです。

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