2

このExpressアプリをローカルで実行すると機能します。Herokuで実行すると、/または/nested

Error: Failed to lookup view "index"
    at Function.app.render (/app/node_modules/express/lib/application.js:493:17)
    at ServerResponse.res.render (/app/node_modules/express/lib/response.js:753:7)
    at /app/server.js:21:16
    at callbacks (/app/node_modules/express/lib/router/index.js:161:37)
    at param (/app/node_modules/express/lib/router/index.js:135:11)
    at pass (/app/node_modules/express/lib/router/index.js:142:5)
    at Router._dispatch (/app/node_modules/express/lib/router/index.js:170:5)
    at Object.router (/app/node_modules/express/lib/router/index.js:33:10)
    at next (/app/node_modules/express/node_modules/connect/lib/proto.js:199:15)
    at store.get.next (/app/node_modules/express/node_modules/connect/lib/middleware/session.js:309:9)

Error: Failed to lookup view "nested/index"
    at Function.app.render (/app/node_modules/express/lib/application.js:493:17)
    at ServerResponse.res.render (/app/node_modules/express/lib/response.js:753:7)
    at /app/server.js:24:16
    at callbacks (/app/node_modules/express/lib/router/index.js:161:37)
    at param (/app/node_modules/express/lib/router/index.js:135:11)
    at pass (/app/node_modules/express/lib/router/index.js:142:5)
    at Router._dispatch (/app/node_modules/express/lib/router/index.js:170:5)
    at Object.router (/app/node_modules/express/lib/router/index.js:33:10)
    at next (/app/node_modules/express/node_modules/connect/lib/proto.js:199:15)
    at store.get.next (/app/node_modules/express/node_modules/connect/lib/middleware/session.js:309:9)

私のサーバーファイル:

express = require 'express'
app = express()

app.configure () ->

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

  app.use express.logger('dev')
  app.use express.bodyParser()
  app.use express.methodOverride()
  app.use express.cookieParser()
  app.use express.session(
    secret: 'WTF'
  )
  app.use app.router
  app.use express['static'](process.cwd() + '/public')

  app.get '/', (req, res) ->

    res.render 'index'

  app.get '/nested', (req, res) ->

    res.render 'nested/index'

port = process.env.PORT || 3000

app.listen port, () -> 
  console.log 'Server started on ' + port + '\nPress CTRL-C to stop server.'

ローカルでは、サーバーを実行してファイルを検索するように指定する必要はありませapp.set 'views', __dirname + '/views'。これがある場合とない場合で、Herokuでは機能しません。

4

1 に答える 1

3

あなたの編集について:

問題が発生する可能性があります。文字列は小文字のパスを指定しますが、次のようになります。

ファイルは実際には大文字になっています。

ローカルシステムでは大文字と小文字を区別しないファイルシステムが使用されているようですが、Herokuでは使用されていません。



Expressがビューを見つけやすくするために、'views'ルートパスを設定できます。

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

res.render()絶対パスを次の場所に渡すこともできます。

res.render(__dirname + '/views/admin/login');

また、おそらく通過する必要はない(そして望まないかもしれない)ことに注意しreqresくださいres.render()

app.get('/admin/login', function (req, res) {
    res.render('admin/login');
});

それらを使用すると、のプロパティはビューreqに含まれ、は無視されるか、ではないためエラーが発生します。localsrescallbackfunction

于 2013-02-12T18:03:22.313 に答える