Mongo数据库连接未建立

时间:2018-11-27 10:39:16

标签: mongodb express

下面是我用来启动服务器的代码。它正在localhost服务器3000中运行。

app.use('/', books);

app.listen(3000, function(){
    console.log('Server running at port 3000: http://localhost:3000')
});

下面的代码引发mongodb错误。不知道到底是什么错误。下面是我的代码

var express = require('express');
var router = express.Router();
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://127.0.0.1:27017';

// SHOW LIST OF BOOKS
router.get('/book', function(req, res, next) {  
    MongoClient.connect(url, function(error, db) {
      if (error) throw error;
      var dbo = db.db("BookStore");
      dbo.collection("Books").find().toArray(function(err, result) {
        if (err) throw err;
        res.send(result);
        console.log(result);
        db.close();
      });
    });
});

// SHOW BOOK with ISBN
router.get('/book/:isbn', function(req, res, next) {
    var isbn = parseInt(req.params.isbn);   
    MongoClient.connect(url, function(error, db) {
      if (error) throw error;
      var dbo = db.db("BookStore");
      var query = { "isbn": isbn };
      dbo.collection("Books").findOne(query, function(err, result) {
        if (err) throw err;
        res.send(result);
        console.log(result);
        db.close();
      });
    });
});


// Add BOOK
router.post('/book', function(req, res, next) { 
    MongoClient.connect(url, function(error, db) {
      if (error) throw error;
      var dbo = db.db("BookStore");
      var myobj = {
        "isbn":req.body.isbn,
        "publisher":req.body.publisher,
        "title":req.body.title,
        "authors":req.body.authors,
        "publishedDate":req.body.publishedDate,
        "price":req.body.price
      };
      dbo.collection("Books").insertOne(myobj, function(err, result) {
        if (err) throw err;
        res.send('Book with '+req.body.isbn+' is successfully added');
        db.close();
      });
    });
});

// UPDATE BOOK
router.put('/book/:isbn', function(req, res, next) {
    var isbn = parseInt(req.params.isbn);
    MongoClient.connect(url, function(error, db) {
      if (error) throw error;
      var dbo = db.db("BookStore");
      var query = { "isbn": isbn };
      var newvalues = { $set: {
            "publisher":req.body.publisher,
            "title":req.body.title,
            "authors":req.body.authors,
            "publishedDate":req.body.publishedDate,
            "price":req.body.price
          }
        };
      dbo.collection("Books").updateOne(query, newvalues, function(err, result) {
        if (err) throw err;
        res.send('Book with '+req.params.isbn+' is successfully updated');
        db.close();
      });
    });
});


// DELETE BOOK
router.delete('/book/:isbn', function(req, res, next) {
    var isbn = parseInt(req.params.isbn);
    MongoClient.connect(url, function(error, db) {
      if (error) throw error;
      var dbo = db.db("BookStore");
      var query = { "isbn": isbn };
      dbo.collection("Books").deleteMany(query, function(err, result) {
        if (err) throw err;
        res.send('Book with '+req.params.isbn+' is successfully removed');
        db.close();
      });
    });
});

module.exports = router;

代码说明:

我们正在创建通往我们的应用程序的路径,称为“图书”。所以 每当有人浏览到我们应用程序的http://localhost:3000/books时,为此路线定义的代码段将为 被执行。

这是我们在“图书”中获得的所有记录 通过db.collection('Books')。find()命令进行收集。然后,我们将此集合分配给一个名为cursor的变量。使用此光标变量,我们将能够浏览集合的所有记录。

3 个答案:

答案 0 :(得分:0)

即使将分配给变量 url 的值更改为 mongodb:// [user_name]:[password] @ 127.0.0.1:27017 / [your_database_name],也无法连接]?authSource = admin 吗?

答案 1 :(得分:0)

实际上,该错误与MongoDB版本(MongoClient.connect(url, function(error, db))有关,MongoDB开发人员已更改其API。我不知道哪个版本,使用MongoClient.connect(url, function(error, db)时会引发错误。 所以应该是MongoClient.connect(url, function(err, client) 链接到api-doc

  

不要忘记运行 mongod

答案 2 :(得分:0)

  

在终端上运行sudo mongod