2016-12-15 1 views
1

Я пытаюсь создать REST API с помощью Node.js, Express и Mongodb. Я использую пакет NPM MongoDB для подключения к базе данных, ниже мой sever.js код файлаMongoError: топология была уничтожена (при поиске документов) и пул экземпляров был уничтожен (при вставке документов)

var express = require("express"); 
var app = express(); 
var bodyParser = require("body-parser"); 
var port = process.env.PORT || 8080; 
var mongo = require("mongodb"); 
var Server = mongo.Server; 
var Db = mongo.Db; 
var ObjectID = mongo.ObjectID; 
try{  
    var config = require('./configure.js'); 
}catch(e){ 
    console.log("configuration file is hidden on github for security"); 
    config = null; 
} 
var usersCollection = config.usersCollection; 
var login = require('./routes/login/index.js'); 
var signup = require('./routes/signup/index.js'); 
var Database = new Db(process.env.DBNAME || config.DBNAME , new Server(process.env.DBHOST || config.DBHOST, process.env.DBPORT || config.DBPORT, {'native_parser': true})); 


Database.open(function (err, mongoclient) { 
     if(err){ 
      console.log("Failed to connect to the database. Please Check the connection"); 
      throw err; 
     }else{ 
      Database.authenticate(process.env.DBUSER || config.DBUSER, process.env.DBPASS || config.DBPASS, function(err, res) { 
       if (err) { 
        console.log("Authentication Failed"); 
        throw err; 
       }else{ 
        console.log("Connected to the database Successfully"); 
        app.use(bodyParser.urlencoded({ extended: true })); 
        app.use(bodyParser.json()); 
        var users = Database.collection(usersCollection); 
        login(app,users); 
        signup(app,users); 

        Database.close(); 
       } 
      }); 
     } 
    }); 

app.listen(port,function(){ 
    console.log("Server Started Listening to port : "+port); 
}); 

маршруты/Логин/index.js

module.exports = function(app,users){ 
app.route('/login') 
    .post(function(req,res){ 
     var username = req.body.username; 
     var password = req.body.password; 
     var query = {'FirstName':username}; 

     users.find().toArray(function(err,docs){ 
      if(err){ 
       throw err; 
      }else{ 
       console.log("no err"); 
       if(doc.LastName == password){ 
        res.send({status : true}); 
       }else{ 
        res.send({status : false}); 
       } 
      } 
     }); 
    }); 

}

и маршруты/Signup/index.js

module.exports = function(app,users){ 
app.route('/signup') 
    .post(function(req,res){ 
     var doc = { EmpNo:"1", 
        FirstName:"Andrew", 
        LastName:"Neil", 
        Age:"30", 
        Gender:"Male", 
        Skill:"MongoDB", 
        Phone:"408-1234567", 
        Email:"[email protected]", 
        Salary:"80000" 
     }; 

     users.insert(doc,function(err,info){ 
      if(err){ 
       throw err; 
      }else{ 
       console.log('Successfully inserted ' + JSON.stringify(info)); 
       res.send({result: 'done'}); 
      } 
     }); 
    }); 

}

Когда я пытаюсь вставить документы в server.js, я могу вставить их успешно, но через маршруты/signup/index.js я получаю пул экземпляров, был уничтожен аналогично, если я пытаюсь найти документы на сервере .js нет ошибки, но если я попытаюсь сделать это из маршрутов/login/index.js, то я получаю ошибку, поскольку топология была уничтожена.

Нужна помощь, чтобы решить эту проблему.

ответ

1

Эти ошибки выдаются, если соединение как-то срезается в середине процесса.

, потому что оба users.find() и users.insert() функции асинхронного файл server.js достигает функцию Database.close() и закрывает соединение с базой данных, прежде чем он закончит процесс, таким образом, давая ошибки.

+0

У меня получилось, я удалил заявление Database.close(), он работает нормально. Спасибо. –

Смежные вопросы