在Heroku上找不到的Jade模板
在本地运行此 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'
来运行服务器并find这些文件 – 它不能在Heroku上使用或不使用。
关于你的编辑:
这个问题可能是案例。 string指定小写path:
-
res.render 'index'
-
res.render 'nested/index'
这些文件实际上是大写的:
-
views/Index.jade
-
views/nested/Index.jade
您的本地系统似乎使用不区分大小写的文件系统,而Heroku则不使用。
为了帮助快速查找您的意见,您可以设置一个'views'
根path:
app.set('views', __dirname + '/views');
您也可以将绝对path传递给res.render()
:
res.render(__dirname + '/views/admin/login');
另外请注意,您可能不需要(也可能不想)将req
和res
传递给res.render()
:
app.get('/admin/login', function (req, res) { res.render('admin/login'); });
有了它们, req
的属性将被包含在视图和res
因为callback
将被忽略或导致错误,因为它不是一个function
。