Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js heroku使用jade时出错_Node.js_Heroku_Pug - Fatal编程技术网

Node.js heroku使用jade时出错

Node.js heroku使用jade时出错,node.js,heroku,pug,Node.js,Heroku,Pug,调用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 +

调用
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' });
});
好的,杰德:

!!! 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)
如果我替换
res.render('ok',{title:'ok'})通过
res.end('some text')工作正常

有解决办法吗


谢谢

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

您可以查看更多详细信息

这可能会解决你的问题

另外,将“/”添加到视图的路径中(或像在express中那样将其删除)

编辑:我检查了某个地方是否使用了“查看引擎”设置,并且,正如本杰明所说,我不明白为什么您对
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”
  • 添加了视图目录路径设置中缺少的
    /
  • 删除了
    express.session
    调用后的逗号
您这边的待办事项:
-删除
ok.jade
文件中
html
之前的缩进。

如果您查看[the express source code][1],您会看到
express/lib/view.js:41:65
引用了
this.defaultEngine[0]
这意味着传递给视图构造函数的options.defaultEngine未定义。这段代码依次调用:
if(!view){view=new view(name,{defaultEngine:This.get('view engine'),root:This.get('views'),engines:engines});
这意味着
This.get('view engine')
工作不正常。您确定jade设置正确吗?[1]当前位置我肯定问题出在Jade身上,但我不知道如何解决这个问题!你怎么这么肯定Jade有问题?
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' });
});