Ошибка Gerting db.collection не является функцией?

1

Я использую socket.io и nodejs/express с mongodb. В server.js Я храню данные в mongodb, но я получаю ошибку. Db.collection не является функцией, почему так?

Я видел этот вопрос → db.collection не является функцией при использовании MongoClient v3.0, но я не могу понять, как я могу изменить свой код, чтобы он мог работать? Должен ли я перемещать весь код внутри .then()?

Код:

server.js:

const express = require('express');
const mongoose = require('mongoose');
const socket = require('socket.io');
const message = require('./model/message')

const app = express();

const db = require('./config/keys').mongoURI;

mongoose.connect(db, {useNewUrlParser: true})
  .then(() => console.log('Mongodb connected...'))
  .catch( err => console.log(err));

const port = 5000;

let server = app.listen(5000, function(){
  console.log('server is running on port 5000')
});

let io =  socket(server);

io.on("connection", function(socket){
  console.log("Socket Connection Established with ID :"+ socket.id)

  socket.on('disconnect', function(){
    console.log('User Disconnected');
  });

  let chat = db.collection('chat');  <---GETTING ERROR HERE

      socket.on('SEND_MESSAGE', function(data){
        let message = data.message;
        let date = data.date;

        // Check for name and message
        if(name !== '' || date !== ''){
            // Insert message
            chat.insert({message: message, date:date}, function(){
                socket.emit('output', [data]);
            });
        }
    });

    chat.find().limit(100).sort({_id:1}).toArray(function(err, res){
      if(err){
          throw err;
      }
      // Emit the messages
      socket.emit('RECEIVE_MESSAGE', res);
    });

})

Примечание: Моя версия mongo - 4

  • 0
    что require('./config/keys').mongoURI ? строка?
  • 0
    @QoP Да, это строка. Это URL-адрес монго из mlab -> mongodb://<dbuser>:<dbpassword>@ds141633.mlab.com:41633/mongochat

2 ответа

1
Лучший ответ

Вам необходимо передать соединение с объектом db, как показано ниже.

const mongoURI = require('./config/keys').mongoURI;

mongoose.connect(mongoURI, {useNewUrlParser: true}

db = mongoose.connection;

db.on('error', console.error.bind(console, 'connection error:'));

db.once('open', function() {
console.log('Mongodb connected...')
});

После этого вы готовы использовать объект db. Затем вы создаете schmea и models и используете его для вставки или запроса данных. В вашем случае это модель chat.

Кажется, вы не mongoose использование mongoose, поэтому я рекомендую сначала прочитать документацию: https://mongoosejs.com/docs/index.html

0

попытайся

const url = "mongodb://<dbuser>:<dbpassword>@ds141633.mlab.com:41633/mongochat";
const options = const options = {

  useNewUrlParser: true,

  autoIndex: false, // Don't build indexes

  reconnectTries: Number.MAX_VALUE, // Never stop trying to reconnect

  reconnectInterval: 1000, // Reconnect every 500ms

  poolSize: 10, // Maintain up to 10 socket connections

  // If not connected, return errors immediately rather than waiting for reconnect
  bufferMaxEntries: 0,

  connectTimeoutMS: 10000, // Give up initial connection after 10 seconds

  socketTimeoutMS: 45000, // Close sockets after 45 seconds of inactivity
  family: 4 // Use IPv4, skip trying IPv6

};

//связь с базой данных...

**

mongoose.connect(url, options).then(
  () => {
    console.log('database connected');
  },
  err => console.log(err)
);
mongoose.Promise = global.Promise;

**

Ещё вопросы

Сообщество Overcoder
Наверх
Меню