Node.js Cloud Foundry MongoDB错误恢复
我想在Cloud Foundry上部署Node.JS应用程序。 我遵循以下步骤:Node.js Cloud Foundry MongoDB错误恢复,node.js,mongodb,cloud-foundry,swisscomdev,Node.js,Mongodb,Cloud Foundry,Swisscomdev,我想在Cloud Foundry上部署Node.JS应用程序。 我遵循以下步骤: 在package.json中添加引擎部分 我创建manifest.yml 我在install.js中使用了以下连接: 以及app.js中的以下内容: 通过命令行连接到SCAPP,并使用cf push推送应用程序 因为云上没有MongoDB,所以我有一个错误 我在云上构建MOngoDB服务,并通过web GUI直接绑定应用程序 在gui上,我单击我的应用程序的重新设置按钮 我有错误 我在清单中添加了服务mongoD
感谢您的帮助当您对
VCAP\u服务
进行解析时(您会得到一个包含主机名和端口的URL),我强烈建议您利用其中一个现有库进行进一步的项目:
不过,请确保您的mongo凭据的解析工作正常(cf e${app_name}
,查找VCAP_服务,手动比较)
如果您想用独立代码测试您的服务,下面是一个示例应用程序,我很快将其组合起来,用于测试绑定到它的所有mongodb服务:
package.json:
{
"name": "mongo-tester",
"version": "1.0.0",
"description": "tests all mongodbs via VCAP_SERVICES",
"main": "server.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Michael Erne",
"license": "MIT",
"dependencies": {
"async": "^2.5.0",
"cfenv": "^1.0.4",
"lodash": "^4.17.4",
"mongodb": "^2.2.31"
}
}
server.js:
var cfenv = require('cfenv'),
_ = require('lodash'),
http = require('http'),
async = require('async'),
MongoClient = require('mongodb').MongoClient
var appEnv = cfenv.getAppEnv();
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Return something for CF Health Check\n');
}).listen(appEnv.port);
var services = _.values(appEnv.getServices());
var mongodbs = _.filter(services, { label: 'mongodb' });
async.eachLimit(mongodbs, 1, function (m, callback) {
MongoClient.connect(m.credentials.database_uri, function (err, db) {
if (err) {
return callback(err);
}
db.collection("debug").insertOne({"test": true}, function(err, res) {
if (err) return callback(err);
console.log("document inserted successfully into " + m.credentials.database_uri);
db.close();
return callback(null);
});
});
}, function (err) {
if (err) {
console.log(err.stack || err);
console.log('---> mongodb connection failed <---');
return;
}
console.log('---> connection to all BOUND mongodb successful <---');
});
var cfenv=require('cfenv'),
_=需要('lodash'),
http=require('http'),
async=require('async'),
MongoClient=require('mongodb')。MongoClient
var appEnv=cfenv.getAppEnv();
http.createServer(函数(req,res){
res.writeHead(200,{'Content-Type':'text/plain'});
res.end('Return something for CF Health Check\n');
}).监听(显示端口);
var services=u2;.values(appEnv.getServices());
var mongodbs=551;.filter(服务,{label:'mongodb'});
eachLimit(mongodbs,1,函数(m,回调){
MongoClient.connect(m.credentials.database_uri,函数(err,db){
如果(错误){
返回回调(err);
}
db.collection(“debug”).insertOne({“test”:true},函数(err,res){
if(err)返回回调(err);
log(“文档成功插入”+m.credentials.database_uri);
db.close();
返回回调(null);
});
});
},函数(err){
如果(错误){
console.log(err.stack | | err);
console.log('-->mongodb连接失败连接到所有绑定的mongodb成功,而您对VCAP_服务的解析似乎可以正常工作(您会得到一个包含主机名和端口的URL),我强烈建议在进一步的项目中利用现有的库之一:
不过,请确保您的mongo凭据的解析工作正常(cf e${app_name}
,查找VCAP_服务,手动比较)
如果您想用独立代码测试您的服务,下面是一个示例应用程序,我很快将其组合起来,用于测试绑定到它的所有mongodb服务:
package.json:
{
"name": "mongo-tester",
"version": "1.0.0",
"description": "tests all mongodbs via VCAP_SERVICES",
"main": "server.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Michael Erne",
"license": "MIT",
"dependencies": {
"async": "^2.5.0",
"cfenv": "^1.0.4",
"lodash": "^4.17.4",
"mongodb": "^2.2.31"
}
}
server.js:
var cfenv = require('cfenv'),
_ = require('lodash'),
http = require('http'),
async = require('async'),
MongoClient = require('mongodb').MongoClient
var appEnv = cfenv.getAppEnv();
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Return something for CF Health Check\n');
}).listen(appEnv.port);
var services = _.values(appEnv.getServices());
var mongodbs = _.filter(services, { label: 'mongodb' });
async.eachLimit(mongodbs, 1, function (m, callback) {
MongoClient.connect(m.credentials.database_uri, function (err, db) {
if (err) {
return callback(err);
}
db.collection("debug").insertOne({"test": true}, function(err, res) {
if (err) return callback(err);
console.log("document inserted successfully into " + m.credentials.database_uri);
db.close();
return callback(null);
});
});
}, function (err) {
if (err) {
console.log(err.stack || err);
console.log('---> mongodb connection failed <---');
return;
}
console.log('---> connection to all BOUND mongodb successful <---');
});
var cfenv=require('cfenv'),
_=需要('lodash'),
http=require('http'),
async=require('async'),
MongoClient=require('mongodb')。MongoClient
var appEnv=cfenv.getAppEnv();
http.createServer(函数(req,res){
res.writeHead(200,{'Content-Type':'text/plain'});
res.end('Return something for CF Health Check\n');
}).监听(显示端口);
var services=u2;.values(appEnv.getServices());
var mongodbs=551;.filter(服务,{label:'mongodb'});
eachLimit(mongodbs,1,函数(m,回调){
MongoClient.connect(m.credentials.database_uri,函数(err,db){
如果(错误){
返回回调(err);
}
db.collection(“debug”).insertOne({“test”:true},函数(err,res){
if(err)返回回调(err);
log(“文档成功插入”+m.credentials.database_uri);
db.close();
返回回调(null);
});
});
},函数(err){
如果(错误){
console.log(err.stack | | err);
console.log('-->mongodb连接失败连接到所有绑定的mongodb成功最后我们发现了问题。cloud foundry在安装后阶段不允许访问mongodb服务。因此我们将其更改为预启动,并成功运行。
感谢您的帮助我们终于找到了问题所在。cloud foundry在安装后阶段不允许访问MongoDB服务。因此,我们将其更改为预启动,并成功运行。
感谢您的帮助您在内部应用程序Cloud 2017-10-03T06:26:09Z上创建了容器,我可以确认容器是否正常。请发布有关您的代码和设置(应用程序)的更多详细信息感谢您的支持。我没有编写该应用程序。我知道它不是为了部署在云端上而设计的,并且该应用程序在本地计算机上可以不经修改地工作。对于代码,我不知道您需要更准确的信息。我们可以在下午讨论吗?请写下您所做的每一步(清单,商业应用程序产品来源,推送命令)发送至Scapp Internal,INI-INO-SWD。以下信息太少,无法帮助您在内部应用程序Cloud 2017-10-03T06:26:09Z上创建容器,我可以确认容器是否正常。请发布有关代码和设置(应用程序)的更多详细信息感谢您的支持。我没有编写该应用程序。我知道它不是为了部署在云端上而设计的,并且该应用程序在本地计算机上可以不经修改地工作。对于代码,我不知道您需要更准确的信息。我们可以在下午讨论吗?请写下您所做的每一步(清单,商业应用程序产品来源,推送命令)到Scapp Internal,INI-INO-SWD。这里的信息太少,无法帮助您感谢您的评论。我已经测试并返回了“-->连接到所有绑定mongodb成功的一个问题。是否允许在install.js文件中连接到mongodb?还是仅在server.js(我的例子是app.js)中连接到mongodb.正如您所看到的,我的install.js是c
Database connection responded with: failed to connect to server
[2xtorvw9ys7tg9pc.service.consul:49642] on first connect [MongoError:
connect ECONNREFUSED 10.98.250.54:49642]
{
"name": "mongo-tester",
"version": "1.0.0",
"description": "tests all mongodbs via VCAP_SERVICES",
"main": "server.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Michael Erne",
"license": "MIT",
"dependencies": {
"async": "^2.5.0",
"cfenv": "^1.0.4",
"lodash": "^4.17.4",
"mongodb": "^2.2.31"
}
}
var cfenv = require('cfenv'),
_ = require('lodash'),
http = require('http'),
async = require('async'),
MongoClient = require('mongodb').MongoClient
var appEnv = cfenv.getAppEnv();
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Return something for CF Health Check\n');
}).listen(appEnv.port);
var services = _.values(appEnv.getServices());
var mongodbs = _.filter(services, { label: 'mongodb' });
async.eachLimit(mongodbs, 1, function (m, callback) {
MongoClient.connect(m.credentials.database_uri, function (err, db) {
if (err) {
return callback(err);
}
db.collection("debug").insertOne({"test": true}, function(err, res) {
if (err) return callback(err);
console.log("document inserted successfully into " + m.credentials.database_uri);
db.close();
return callback(null);
});
});
}, function (err) {
if (err) {
console.log(err.stack || err);
console.log('---> mongodb connection failed <---');
return;
}
console.log('---> connection to all BOUND mongodb successful <---');
});
document inserted successfully into mongodb://xxx:yyy@zzz.service.consul:1337/databaseName
---> connection to all BOUND mongodb successful <---