2017-12-31 55 views
0

私はNode.jsとMongoDBの初心者です。いくつかのPOST APIを実装し始めました。私はMongoDBを使ってPOST経由でデータを挿入していますが、ターミナルでそのデータベースが表示されていることをテスト中にPOSTが実行されている間にdbが見つからないというエラーが表示されます。私は何が間違っているのか分かりません。以下は私のコードでエラーを得ている理由です外MongoDBがデータを挿入しない

const express  = require('express'); 
const MongoClient = require('mongodb').MongoClient; 
const bodyParser = require('body-parser'); 

const app   = express(); 
const port  = 8080; 
var url = "mongodb://localhost:27017/mydb" 

app.use(bodyParser.urlencoded({ extended: true})); 
app.use(bodyParser.json()); 

app.listen(port,() => { 
    console.log('We are live on ' + port); 
}); 

MongoClient.connect(url, function(err, db) { 
    if (err) throw err; 
    console.log("Database created!"); 
    db.close(); 
}); 

app.post('/api/notes', function(req, res) { 

    var myobj = { text: req.body.body, title: req.body.title }; 
    var dbase = db.db("mydb"); 
    dbase.collection('notes').insertOne(myobj, function(err, result) { 
     if (err) { 
     res.send({ 'error': 'An error has occurred' }); 
     } else { 
     res.send(result.ops[0]); 
     } 
    }); 
}); 
+0

ログを添付できますか? –

答えて

3

あなたdbは使用できません。

を一度MongoClient.connectを行う開いたときにアプリが起動すると:あなたが言うMongoDBのネイティブ接続

についてよりよく理解するためにhttps://groups.google.com/forum/#!msg/node-mongodb-native/mSGnnuG8C1o/Hiaqvdu1bWoJを参照することができ

MongoClient.connect(url, function(err, db) { 
    if (err) throw err; 
    console.log("Database created!"); 
global.db=db; 
//don't close connection here if you want to use outside just put it as global 
}); 

この方法を試してみてくださいdbオブジェクトを再利用する。 It's not a singleton connection pool each .connectはnew connection poolを作成します。

+0

助けてくれてありがとう、投稿後に接続を閉じてしまった、それが正しいのですか、複数の投稿と投稿が必要な場合は、どこに接続を閉じる必要がありますか? – Kashif

+0

接続を閉じる必要はありません。そのまま。あなたの理解を深めるリンクをご覧ください:) – abdulbarik

+0

この知識を私と共有してくれてありがとう。 – Kashif

1

ここで変数スコープを理解するだけで済みます。変数dbのスコープはローカルなので、コールバックのMongoClient.connectの外部にはアクセスできません。 dbaseは間違っていない場合はundefinedになります。 試してみてください:

app.post('/api/notes', function(req, res) { 
    var myobj = { text: req.body.body, title: req.body.title }; 
    MongoClient.connect(url, function(err, db) { 
    if (err) { 
     console.log(err); 
     res.status(500).send('Db Connection Failed..') 
     } else { 
     var myobj = { text: req.body.body, title: req.body.title }; 
     var dbase = db.db("mydb"); 
     dbase.collection('notes').insertOne(myobj, function(err, result) { 
      if (err) { 
     res.send({ 'error': 'An error has occurred' }); 
     } else { 
     res.send(result.ops[0]); 
     } 
     }) 
     } 
    }); 
}); 
+0

これは接続を作成する正しい方法ではありません。あなたのコードに従って、彼はベストプラクティスではないすべてのAPIに接続を作成しなければなりません – abdulbarik

+0

ええ、私はそれを知っていましたが、すばやく修正すると考えました。あなたが私のコードのための時間を与えてくれてありがとう、それを感謝します。 –

関連する問題