Node.js应用程序在本地工作,但不在云中

我的app.js文件如下所示:

var port = (process.env.VMC_APP_PORT || 3000); var host = (process.env.VCAP_APP_HOST || 'localhost'); var http = require('http'); var rip = require('./config.js'); http.createServer(function (req, res) { //do nothing...no response expected via http }).listen(port, host); 

config.js文件包含了这个(以及更多,但是为了简洁/相关性而剪切):

 //several global.<property_name> assignments global.mName = "Application Name"; //serveral more global.<property_name> assignments ... ... require("./main.js"); 

main.js文件是这样开始的:

 console.log(mName+" >>> Loading."); 

当我在本地运行应用程序时,它运行正常执行:

节点app.js

但是,使用以下命令将应用程序推送到云代工厂时:

vmc push [app_name] –runtime = node06

我得到以下错误:

创build应用程序:确定上传应用程序:
检查可用资源:确定
处理资源:确定
包装应用:好的
上传(10K):好的
推送状态:确定暂存应用程序“app_name”:确定
启动应用程序'app_name':……………………..

错误:应用程序[app_name]无法启动,在下面logging信息。

====> /logs/stderr.log <====

node.js:134 throw e; // process.nextTick错误,或者第一次打勾时发生'error'事件^ ReferenceError:mName在Object中没有定义。 (/var/vcap/data/dea/apps/app_name-0-6996d737ed319bcffaf696d653423d7c/app/main.js:6:1)在Module._compile(module.js:411:26)在Object..js(module.js :417:10)在Array.load(module.js:343:31)在Function._load(module.js:302:12)在Array。 (module.js:430:10)在EventEmitter._tickCallback(node.js:126:26)

好像我在config.js中的全局对象中设置的属性没有被传送到main.js。 我通过修改main.js来明确引用global.mName而不是仅仅是mName,并且错误消失了,但是对全局对象属性的另一个引用然后开始抱怨我证实了这一点。

由于没有明确的“全球”,一切工作正常。 参考,我不认为我应该明确提到“全球”。 对于那些variables。 有什么我在这里失踪? 任何帮助表示赞赏。

谢谢!

继续,将以下package.json文件添加到应用程序目录的根目录中:

 { "name":"hello-node", "version":"0.0.1", "scripts": { "start": "app.js" } } 

现在在这种情况下package.json为你做的是告诉cloudfoundry.com你的执行/启动脚本文件应该是“app.js”

你需要这个的原因是你也有一个“main.js”文件。 在cloudfoundry.com中,默认情况下,main.js文件已经写完了你的app.js,所以它会破坏你的工作。

所以包含脚本对象的package.json修复了这个问题:-)