Heroku使用玉的错误

当我们调用render函数时出现错误[这个程序在Heroku上运行]

web.js:

 var async = require('async'); var express = require('express'); var util = require('util'); // create an express webserver var app = express.createServer( express.logger(), express.static(__dirname + '/public'), express.bodyParser(), express.cookieParser(), // set this to a secret value to encrypt session cookies express.session({ secret: process.env.SESSION_SECRET || 'secret123' }), ); app.set('views', __dirname + 'views'); app.set('view engine', 'jade'); // listen to the PORT given to us in the environment var port = process.env.PORT || 3000; app.listen(port, function() { console.log("Listening on " + port); }); app.get('/', function ( req, res ) { res.render('ok', { title : 'ok' }); }); 

ok.jade:

 !!! 5 html(lang='en') head title= title body div#navigation 

的package.json:

 { "name": "package", "version": "0.0.1", "description": "Facebook integration, Node.js", "dependencies": { "express": "latest", "jade":"0.17.0" }, "engines": { "node": "0.8.19", "npm" : "1.2.10" } } 

错误:

 TypeError: Cannot read property '0' of undefined at new View (/app/node_modules/express/lib/view.js:41:65) at Function.app.render (/app/node_modules/express/lib/application.js:486:12) at ServerResponse.res.render (/app/node_modules/express/lib/response.js:753:7) at /app/web.js:32:9 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) 

如果我replaceres.render('ok', {title : 'ok'}); 通过res.end('some text'); 完美的作品。

任何解决scheme

谢谢!

最新版本的Express似乎使用app.engine()而不是app.set('view engine')( doc )

 app.engine('jade', require('jade').__express); 

你可以有更多的细节看这个函数的来源 。

这可能会解决你的问题。

另外,将“/”添加到您的视图的path(或删除它,因为它是默认的快递)

编辑:我检查是否“视图引擎”设置被用在某个地方, 而且就像本杰明说,我不明白你为什么调用app.set('view engine')不起作用。

编辑2:我只是试图运行你的代码,并有几个故障点。 这是一个固定的web.js文件在我的本地计算机上工作:

 var express = require('express'); var util = require('util'); // create an express webserver var app = express( express.logger(), express.static(__dirname + '/public'), express.bodyParser(), express.cookieParser(), // set this to a secret value to encrypt session cookies express.session({ secret: process.env.SESSION_SECRET || 'secret123' }) ); app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); // listen to the PORT given to us in the environment var port = process.env.PORT || 3000; app.listen(port, function() { console.log("Listening on " + port); }); app.get('/', function ( req, res ) { res.render('ok', { title : 'ok' }); }); 

更新日志:

  • 移除require('async')因为它是未使用的,而不是在package.json中
  • 使用express()而不是弃用的“.createServer”
  • 添加缺less/在视图目录path设置
  • express.session调用后删除了逗号

Todo在你身边: – 在你的ok.jade文件中的html之前删除缩进。