Node.js 应用程序、Express 和 Cloud Foundry

3

我正在使用开箱即用的expressjs应用程序,并且我正在使用node 0.8.2。在本地工作得很好,但是当我推送到Cloud Foundry时,我会收到以下错误,并且我不知道从哪里开始调试。我假设这是由于配置问题或依赖项问题引起的,但我不知道该怎么办。

Express 500 TypeError:对象#没有方法'randomBytes' 位于Object.uid(/var/vcap/data/dea/apps/dwgapp1-0-690016dc6c7142f385b44b144d3d380e/app/node_modules/express/node_modules/connect/lib/utils.js:122:17) 位于MemoryStore.generate(/var/vcap/data/dea/apps/dwgapp1-0-690016dc6c7142f385b44b144d3d380e/app/node_modules/express/node_modules/connect/lib/middleware/session.js:203:27) 在generate(/var/vcap/data/dea/apps/dwgapp1-0-690016dc6c7142f385b44b144d3d380e/app/node_modules/express/node_modules/connect/lib/middleware/session.js:281:13) 位于Object.session [as handle](/var/vcap/data/dea/apps/dwgapp1-0-690016dc6c7142f385b44b144d3d380e/app/node_modules/express/node_modules/connect/lib/middleware/session.js:290:7) 在next(/var/vcap/data/dea/apps/dwgapp1-0-690016dc6c7142f385b44b144d3d380e/app/node_modules/express/node_modules/connect/lib/proto.js:190:15) 位于Object.cookieParser [as handle](/var/vcap/data/dea/apps/dwgapp1-0-690016dc6c7142f385b44b144d3d380e/app/node_modules/express/node_modules/connect/lib/middleware/cookieParser.js:60:5) 在next(/var/vcap/data/dea/apps/dwgapp1-0-690016dc6c7142f385b44b144d3d380e/app/node_modules/express/node_modules/connect/lib/proto.js:190:15) 位于Object.methodOverride [as handle](/var/vcap/data/dea/apps/dwgapp1-0-690016dc6c7142f385b44b144d3d380e/app/node_modules/express/node_modules/connect/lib/middleware/methodOverride.js:37:5) 在next(/var/vcap/data/dea/apps/dwgapp1-0-690016dc6c7142f385b44b144d3d380e/app/node_modules/express/node_modules/connect/lib/proto.js:190:15) 位于multipart(/var/vcap/data/dea/apps/dwgapp1-0-690016dc6c7142f385b44b144d3d380e/app/node_modules/express/node_modules/connect/lib/middleware/multipart.js:62:61)

    var express = require('express')
       , routes = require('./routes')
       , user = require('./routes/user')
       , http = require('http')
       , path = require('path');

    var app = express();

    app.configure(function(){
       app.set('port', process.env.VCAP_APP_PORT || 3000);
       app.set('views', __dirname + '/views');
       app.set('view engine', 'ejs');
       app.use(express.favicon());
       app.use(express.logger('dev'));
       app.use(express.bodyParser());
       app.use(express.methodOverride());
       app.use(express.cookieParser('your secret here'));
       app.use(express.session());
       app.use(app.router);
       app.use(require('stylus').middleware(__dirname + '/public'));
       app.use(express.static(path.join(__dirname, 'public')));
    });

    app.configure('development', function(){
       app.use(express.errorHandler());
    });

    app.get('/', routes.index);
    app.get('/users', user.list);

    http.createServer(app).listen(app.get('port'), function(){
       console.log("Express server listening on port " + app.get('port'));
    });

检查在Cloudfoundry中使用的Node和Express版本是否存在任何不匹配。 - vinayr
我已经检查过了...CF正在运行0.8.2,我正在运行0.8.2并且我已经执行了vmc udate --runtime=node08。 - user699242
问题是,如果我最初使用0.8.8推送应用程序,它会使用不同版本的express吗? - user699242
也许这可以帮助:http://stackoverflow.com/questions/12592147/restify-on-cloudfoundry-invalid-elf-header - vinayr
2个回答

2
你可以使用 vmc logs 应用名称 命令查看显示的错误消息。
我遇到了和你一样的问题。
问题的原因是我的应用程序所使用的默认 nodejs 版本太旧了,
只需先执行 vmc delete 应用名称 命令删除原有的应用,
然后使用最新版本的 nodejs 创建一个新的应用,vmc push 应用名称 --runtime node08

2

看起来这个问题是由于express的依赖项connect造成的。我最初使用运行在node 0.8.8上的express创建了我的应用程序,而CF使用的是0.8.2。尽管在本地似乎没有什么区别,但当我部署到Cloud Foundry时却出现了这个错误。

我创建了一个全新的应用程序,从一开始就运行在Node 0.8.2上,这似乎解决了问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接