【问题标题】:Jade template not found on Heroku在 Heroku 上找不到 Jade 模板
【发布时间】:2013-03-03 06:04:01
【问题描述】:

在本地运行 this 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。

【问题讨论】:

    标签: node.js heroku express pug


    【解决方案1】:

    关于您的编辑:

    问题可能是个案。而字符串指定小写路径:

    文件实际上是大写的:

    您的本地系统似乎使用了不区分大小写的文件系统,而 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 的属性将作为 locals 包含在视图中,res 因为 callback 将被忽略或导致错误,因为它不是 function

    【讨论】:

    • 嘿,抱歉耽搁了。即使使用您建议的修复程序,我也能够清理应用程序并重现问题。有关代码/Heroku 应用程序的链接,请参见上文。
    • @FrankLoVecchio 问题可能是字符串中的情况与文件名中的情况。查看我的编辑。
    • 我什至没有想到!谢谢。
    • 我知道这是一个老话题,但我已经按照这里的所有建议无济于事。 :( 有什么新想法吗?在本地,一切都像魅力一样,但在推送到 Heroku 后,只能找到索引视图。超级奇怪!
    猜你喜欢
    • 2011-12-23
    • 2018-06-26
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 2014-01-02
    • 2012-04-22
    • 2019-12-12
    相关资源
    最近更新 更多