0
db初学者试图让mongodb和nodejs在云上相互交谈。节点js连接到mongo db
我在app-fog上托管了一个应用程序,但即使当我尝试做最基本的查询时,我也失败了。这是推送到云端的app.js文件的内容。我相信我已经安装了所有必要的依赖(NPM安装MongoDB的& &表达& & BSON & & shrinkwarp),但它是可能的,我已经在一路的失败,即使我在整个过程中去了两次。
var port = (process.env.VMC_APP_PORT || 3000);
var host = (process.env.VCAP_APP_HOST || 'localhost');
var http = require('http');
if(process.env.VCAP_SERVICES){
var env = JSON.parse(process.env.VCAP_SERVICES);
var mongo = env['mongodb-1.8'][0]['credentials'];
} else {
var mongo = {
"hostname":"localhost",
"port":3000,
"username":"",
"password":"",
"name":"",
"db":"db"
}
}
var generate_mongo_url = function(obj){
obj.hostname = (obj.hostname || 'localhost');
obj.port = (obj.port || 3000);
obj.db = (obj.db || 'test');
if(obj.username && obj.password){
return "mongodb://" + obj.username + ":" + obj.password + "@" + obj.hostname + ":" + obj.port + "/" + obj.db;
}else{
return "mongodb://" + obj.hostname + ":" + obj.port + "/" + obj.db;
}
}
var mongourl = generate_mongo_url(mongo);
var record_visit = function(req, res){
/* Connect to the DB and auth */
require('mongodb').connect(mongourl, function(err, conn){
if(err){
console.log(">>",err);
}
conn.collection('ips', function(err, coll){
/* Simple object to insert: ip address and date */
object_to_insert = { 'ip': req.connection.remoteAddress, 'ts': new Date() };
/* Insert the object then print in response */
/* Note the _id has been created */
coll.insert(object_to_insert, {safe:true}, function(err){
res.writeHead(200, {'Content-Type': 'text/plain'});
res.write(JSON.stringify(object_to_insert));
res.end('\n');
});
});
});
}
http.createServer(function(res,req){
record_visit(req,res);
require('mongodb').connect(mongourl,function(err,conn){
console.log(conn+"\n\n");
});
console.log('Hello from us.\n');
})。listen(process.env.VCAP_APP_PORT || 3000);
现在我好像总是出现此错误:
node_modules/mongodb/lib/mongodb/mongo_client.js:378
throw err
^
TypeError: Cannot call method 'collection' of null
这个问题似乎不只是收藏,但主要与其父,conn
,我想打印出来,但没有成功。 (我很怀疑它本身是不确定的。)
我知道这可能是一个简单的,RTFM类型的错误,但所有这些概念都在我的头上。
谢谢! BTW
require('mongodb').connect(mongourl, function(err, conn){
if(err) {
console.log(err); // <-- here
...
}
conn.collection('ips', function(err, coll){
:
谢谢!所以,现在当我尝试在本地运行时收到“[Error:connection closed]”。但这不是主要问题,因为我尝试主要将其设置在云中。更令我担心的是,当我将其推送到App-Fog时,它仍然不起作用。 来自app的日志如下: 跳过npm支持:不提供npm-shrinkwrap.json 使用纯JS版本加载C++ bson扩展失败 Cloud Foundry的自动配置失败。错误消息:path.join的参数必须是字符串。 我想知道:我应该联系他们的支持吗? –
可能是一个选项。 – heinob