0

「ビュー」にサブフォルダーを使用するにはどうすればよいですか? メインの「app.js」では、ビューのルート フォルダーを次のように設定しました。

 app.configure(function(){
       app.set('view engine', 'jade');
       app.set('views', __dirname + '/apps' );
       app.use(express.bodyParser());
       app.use(express.methodOverride());
       app.use(express.static(__dirname + '/apps' ));
       app.use(app.router);
 });

そして、私のコントローラーは次のようになります:

 module.exports = function(req, res, base) {
       res.render( 'hello/views/');
 };

フォルダは次のようになります。

 ./apps/hello/views/index.js

しかし、まだそれを見つけることができません。「エラー: ビュー "hello/views" の検索に失敗しました。ありがとう!

4

4 に答える 4

3

実際、私ははるかに優れたソリューションを作成しました。アプリの構成で、デフォルトのビューを次のように設定しました:"

 app.set('view engine', 'jade');
 app.set('views', __dirname + '/views');

後で、boot.js を含めます (expressjs の mvc の例に基づく)。ここには、次のものが含まれます。

 // allow specifying the view engine
 if (obj.engine) app.set('view engine', obj.engine);
 app.set('views', __dirname + '/../apps/' + name + '/views');

これにより、ビュー フォルダーが「apps/xxx/views」フォルダーで指定されたものに上書きされ、次のようにそのフォルダーのルートに新しいビュータイプを指定することもできます。

 // filename = /apps/hello/index.js

 exports.engine = 'jade';

 // Render the indexpage
 exports.index = function(req, res, next){
      res.render('hello');
 };
于 2013-02-07T10:47:02.310 に答える
1

Express に特定のビューをレンダリングするように指示する必要があり、hello/views はフォルダーであるため、自己回答が機能することに驚いています。ただし、コントローラーに使用しているコードパターンに精通していません ( baseExpress ミドルウェアはfunction(req,res,next).

私のルートは次のようになります。

app.set('views', __dirname + '/apps' );
...
app.get('/hello', function(req,res){
  res.render('hello/views/index')
});

この場合./apps/hello/views/index.jadeは、javascript ファイルではなく、jade ファイルです。テンプレートが JavaScript の場合は、おそらくview enginejade 以外に設定する必要があります。

于 2013-02-06T22:39:09.013 に答える
1

ビューをパスの配列として設定できます

app.set('views', [path.join(__dirname, 'views/users/'), path.join(__dirname, 'views')])

app.get('views'); を使用して結果のパスを確認できます。これは配列を返す必要があります。

[/server/views/users/, /server/views]

Express は配列内で使用可能なパスを検索します。次に、このようにファイル名だけでレンダリングできます

res.render( 'index');
res.render( 'profile');
于 2015-08-04T14:54:29.980 に答える
0

次のように、基本ビューをディレクトリのルートに設定することで、この問題を修正しました。

   app.set('views', __dirname);

そして、次のようにコントローラーのルートからフォルダーを追加しました。

   res.render( 'apps/hello/views/');
于 2013-02-04T12:04:03.477 に答える