Я использую 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
Вам необходимо передать соединение с объектом 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
попытайся
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;
**
require('./config/keys').mongoURI
? строка?mongodb://<dbuser>:<dbpassword>@ds141633.mlab.com:41633/mongochat