2017-12-31 41 views
0

Ich bin neuer Anfänger in Node.js und MongoDB und habe angefangen, einige POST API zu implementieren. Ich verwende MongoDB, um Daten über POST einzufügen. Während ich am Terminal getestet habe, dass die Datenbank erstellt wurde, aber während des POST, zeige ich einen Fehler, dass db nicht gefunden wird. Ich bin mir nicht sicher, was ich falsch mache. Unten ist mein CodeMongoDB fügt keine Daten ein

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

können Sie Protokolle anfügen? –

Antwort

3

Ihr db ist nicht verfügbar, außerhalb, warum Sie den Fehler bekommen.

Versuchen Sie, diese Art und Weise:

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

Sie https://groups.google.com/forum/#!msg/node-mongodb-native/mSGnnuG8C1o/Hiaqvdu1bWoJ für ein besseres Verständnis über MongoDB nativen Verbindung beziehen

die sagt:

Sie tun öffnen MongoClient.connect einmal, wenn Ihre App bootet und das db-Objekt wiederverwenden. It's not a singleton connection pool each .connect erstellt einen new connection pool.

+0

Danke für die Hilfe, ich habe die Verbindung nach dem Post geschlossen, ist das richtig, oder wenn ich muss viel bekommen und post, dann wo müssen wir die Verbindung schließen – Kashif

+0

Sie müssen nicht die Verbindung zu schließen, können Sie verwenden wie es ist. Sehen Sie den Link, der Ihnen ein besseres Verständnis gibt :) – abdulbarik

+0

Danke, dass Sie dieses Wissen mit mir teilen. – Kashif

1

Sie müssen nur die variablen Bereiche hier verstehen. Der Gültigkeitsbereich der Variablen db ist lokal, was bedeutet, dass er außerhalb des Rückrufs von MongoClient.connect nicht erreichbar ist. dbase wird undefined sein, wenn ich nicht falsch liege. Versuchen Sie Folgendes:

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

Dies ist nicht der richtige Weg, um eine Verbindung zu erstellen. Gemäß deinem Code muss er eine Verbindung auf jeder API erstellen, die keine Best Practice ist. – abdulbarik

+0

Ja, ich wusste es, aber ich dachte, ich gebe dir eine schnelle Lösung. Danke, dass Sie Zeit für meinen Code gegeben haben, ich schätze es. –

Verwandte Themen