2016-07-18 39 views
1

我想通过节点访问远程mongodb数据。在我app.js采写如下:从节点访问远程mongodb

var mongo = require('mongodb'); 
var MongoClient = require('mongodb').MongoClient; 
var db = MongoClient.connect("mongodb://remote_url:27017/databasetest"); 
//db name is : databasetest 

app.use(function(req,res,next){ 
    req.db = db; 
    next(); 
}); 

以下是写入到从DB访问集合的API:

router.get('/get', function(req, res, next) { 
var db = req.db; 
var collection = db.get('test'); 
collection.find({},function(e,docs){ 
    res.json(docs); 
}); 
}); 

我收到以下错误,而访问API:

db.get方法不是一个函数

有人能帮助我一样

+0

找到

关于MongoClient类的更多细节在很大程度上取决于你的远程MongoDB的服务器上,以及,你有一台服务器单元或者你有仲裁的主要配套单位的单位。请给我们现实的信息。 –

回答

1

蒙戈DB连接字符串有这种格式,你没有用户名和密码

mongodb://<user>:<password>@<url>:<port>/<database> 

对于测试连接,也许很容易在mlab.com用测试账号玩,它是免费的只需要两个分钟。

1。第一步骤测试连接

var MongoClient = require('mongodb').MongoClient;

// Connect to the db 
MongoClient.connect("mongodb://localhost:27017/exampleDb", function(err, db) { 
    if(!err) { 
    console.log("We are connected"); 
    } 
}); 

//当已经测试此,替换

的console.log( “我们正在连接”);

db.collection('test').find(<your query>) 
+0

也试过这个..加入**用户:密码**到网址..但仍然得到相同的错误。 –

2

我假设你使用的是最近(目前为2.2.4版本)Node.js的MongoDB的驱动程序的版本。立即想到

一个问题是这一行代码:

var db = MongoClient.connect("mongodb://remote_url:27017/databasetest"); 

MongoClient.connect()功能需要一个回调参数,否则它会返回一个承诺。但是,您的后续代码不会将变量db视为承诺。

此外,您正尝试从(和到)req对象获取(并设置)db变量。此req对象包含HTTP请求,并具有请求查询字符串,参数,正文,HTTP标头等的属性。这是您看到的错误的来源。

这是最小的工作的例子,我可以用快递提供的mongo外壳等同于命令db.test.find().toArray()

var MongoClient = require('mongodb').MongoClient 
var assert = require('assert') 
var express = require('express') 
var app = express() 

var db = null 
MongoClient.connect('mongodb://localhost:27017/test', function(err,database) { 
    assert.equal(err,null) 
    db = database 
}) 

app.get('/', function(req,res) { 
    db.collection('test').find({}).toArray(function(err,doc) { 
     assert.equal(err,null) 
     res.send(JSON.stringify(doc)) 
    }) 
}) 

app.listen(3000, function() { 
    console.log('Listening on port 3000') 
}) 

注意,在上面的例子中,我使用的是全球db变量来存储由MongoClient.connect()创建的MongoDB数据库连接。如果你感觉更自然,可以随意使用Promise进行试验。在http://mongodb.github.io/node-mongodb-native/2.1/api/MongoClient.html