2017-12-31 62 views
0

저는 Node.js와 MongoDB에서 새로운 초보자이며 몇몇 POST API를 구현하기 시작했습니다. POST를 통해 데이터를 삽입하기 위해 MongoDB를 사용하고 있습니다. 터미널에서 데이터베이스가 생성되었음을 테스트하는 동안 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

도움을 주셔서 감사합니다, 게시 후 연결을 닫았습니다. 그 중 하나입니다. 또는 mutiple을 가져오고 게시해야한다면 어디에서 연결을 닫아야합니까? – 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

예, 알고 있었지만 신속한 수정을 제안했습니다. 감사합니다. 감사합니다. 감사합니다. –