我的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
我收到以下错误:
创建应用程序:好的 上传申请:
检查可用资源:OK
处理资源:好的 包装应用:OK
上传(10K):确定
推送状态:确定 暂存应用程序'app_name':确定
启动应用程序'app_name':..........................错误:应用程序[app_name]无法启动,记录信息 下方。
====&GT; /logs/stderr.log&lt; ====
的node.js:134 扔掉; // process.nextTick错误,或第一次打勾时的'错误'事件 ^ ReferenceError:未定义mName 在对象。 (/var/vcap/data/dea/apps/app_name-0-6996d737ed319bcffaf696d653423d7c/app/main.js:6:1) 在Module._compile(module.js:411:26) at Object..js(module.js:417:10) 在Module.load(module.js:343:31) 在Function._load(module.js:302:12) 在数组。 (module.js:430:10) 在EventEmitter._tickCallback(node.js:126:26)
我在config.js中的全局对象中设置的属性似乎没有传递给main.js.我通过修改main.js以明确引用global.mName而不仅仅是mName来验证这一点,并且该错误消失了,但是对全局对象属性的另一个引用随后开始抱怨。
因为在没有明确的“全局”的情况下,一切工作都很好。参考,我认为我不应该明确地引用“全球”。对于那些变量。这里有什么我想念的吗?任何帮助表示赞赏。
谢谢!
答案 0 :(得分:2)
继续将以下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解决了这个问题: - )