2016-07-18 8 views
1

ノード経由でリモートのmongodbデータにアクセスしたい。書かれている私のapp.jsに次のノードからリモートmongodbにアクセスする

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へのアクセス中に、私は次のエラーを取得しています:

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です

db.getは関数ではありません

誰かが同じ

のために私を助けてもらえ
+0

で見つけることができる多くが同様にあなたのリモートのMongoDBサーバーに依存して、あなたは、単一のサーバユニットを持っているか、またはあなたは、メインユニットをサポートするアービタとのユニットを持っています。現実的な情報もご提供ください。 –

答えて

1

のmongo DB接続文字列の書式は、あなたはmlab.comでテストアカウントでプレイしやすいです多分、それは無料ですAN 2つだけを取る、テスト接続用のユーザー名とパスワード

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

を持っていません分。あなたはこれをテストしているとき

1.Firstステップテスト接続

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

URLに.. **ユーザ:パスワード**を追加しようとしましたが、同じエラーが発生しています。 –

2

のために私はあなたが(現在のバージョンは2.2.4で)のNode.jsのMongoDBドライバの最新バージョンを使用していると仮定しています。すぐに思い浮かぶ

1つの問題は、あなたのコード内でこの行です:

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

MongoClient.connect()機能のコールバックパラメータを必要とし、それ以外の場合は約束を返します。ただし、後続のコードでは、変数dbがPromiseとして扱われません。

また、reqオブジェクトから変数dbを取得(および設定)しようとしています。このreqオブジェクトにはHTTP要求が含まれ、要求クエリ文字列、パラメータ、本文、HTTPヘッダーなどのプロパティがあります。これはあなたが見ているエラーの原因です。上記の例では、私はdbグローバルを使用していることを

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') 
}) 

注:

これは私がmongoシェルのコマンドdb.test.find().toArray()に相当を提供するために、Expressを使用して取得することができ、最小限の実施例であります変数MongoClient.connect()によって作成されたMongoDBデータベース接続を格納する変数。あなたにもっと自然に感じたら、約束を使って実験してください。MongoClientクラスに関する

詳細はhttp://mongodb.github.io/node-mongodb-native/2.1/api/MongoClient.html

関連する問題