1

私はこのようなディレクトリを持っています

/Workspace
  /app
    app.js
  /lib
    /public
      /styles
        *.css
      /scripts
        *.js
    /views
      *.jade

からapp.jsapp私は次のコードを持っています:

libPath = __dirname + '/../lib'

... express stuff ...

app.configure(function() {
  app.set('view', libPath + '/views')
  ... express stuff ...
  app.use(express.static(libPath + '/public'))

... rest of the app ...

ここで問題となるのは、Jadeがビューを見つけることができないが、すべての静的アセットが見つかることです。したがって、app.set('view')は機能していませんが、機能していexpress.staticます。viewsディレクトリをにコピーするとapp、使用は正常に__dirname + '/views'機能します。なぜこれが起こっているのか誰もが知っていますか?

実行するapp.get('view')と、次のようなディレクトリが作成されます/Users/jong/Workspace/app/../lib/views/Users/jong/Workspace/lib/views絶対ルートも無駄にやってみました。このディレクトリが静的アセットに対して機能するが、テンプレートに対しては機能しないのは奇妙なことです。

4

1 に答える 1

5

タイプが間違っています。正しいオプション名はviews、ではなくviewです。

次のようにアプリケーションを構成します

    app.set('views', __dirname + '/views');
    app.set('view engine', 'jade');
    app.set('view options', { layout: true });

しかし、問題の主な原因は、express(そしてMVCが)どのように機能するかを誤解しているように見えることです。

expressexpress.staticリクエストURLが既存の静的ファイルパスと一致すると、configureディレクティブを使用して静的データをブラウザに送信します。

それ以外の場合は、要求されたパスに対して定義されたルートを見つけて、関連するコントローラーを実行しようとします(テンプレートエンジンを順番に使用する場合と使用しない場合があります)。

したがって、たとえばインデックスページを表示するには(パラメータがない場合でも)、index.jsフォルダviewsにが含まれている場合は、次のような操作を行う必要があります。

app.get('/', function (req, res, next) {
    res.render('index', {});
});
于 2012-06-27T07:18:59.413 に答える