从节点访问远程mongodb

时间:2016-07-18 11:15:28

标签: node.js mongodb

我想通过节点访问远程mongodb数据。在我的app.js中写了以下内容:

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不是函数

有人可以帮助我同样的

2 个答案:

答案 0 :(得分:2)

mongo 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(&#34;我们已连接&#34;);

代表

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

答案 1 :(得分:2)

我假设您使用的是最近版本的node.js MongoDB驱动程序(目前版本为2.2.4)。

立即想到的一个问题是代码中的这一行:

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

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

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

这是我可以使用Express在db.test.find().toArray() shell中提供与mongo命令等效的最小工作示例:

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数据库连接。如果感觉更自然,请随意使用Promises进行实验。

有关MongoClient类的更多详细信息,请参阅http://mongodb.github.io/node-mongodb-native/2.1/api/MongoClient.html