我的脚本试图用mongoDB和nodejs创建一个服务器给出错误 - db.collection不是一个函数? [重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

我正在跟进一个教程,使用mongoDB和nodejs创建一个简单的聊天应用程序。视频中的评论看起来不错,似乎只有我正面临这个问题。请帮我解决下面的代码。

//create a variable mongo and require the mongodb module here
const mongo=require('mongodb').MongoClient;

//create a variable called client,require socket and listen to particular port
const client=require('socket.io').listen(4000).sockets;

//connect to mongodb
mongo.connect('mongodb://127.0.0.1/mongochat',function(err,db){
    if(err) throw err;
    console.log('MongoDB connected...');

    //start to work with socket.io

    //1.connect to socket.io
    client.on('connection',function(socket){
        let chat=db.collection('chats');

        //create function to send status to the client

        sendStatus =function(s){
            socket.emit('status',s);
        }
          //get chats from the mongo collections
          chat.find().limit(100).sort({__id:1}).toArray(function(err,res){
            //check for errors
            if(err) throw err;
            //else emit
            socket.emit('output',res);

          });
          //handle input events
          socket.on('input',function(data){
            let name=data.name;
            let message=data.message;

            //check for name and message 
            if(name==' '||message==' '){
                //send error status
                sendStatus('please enter name and message');
            }else
            {
                //insert message
                chat.insert({name: name,message: message},function(){
                    client.emit('output',[data]);

                    //send status objects
                    sendStatus({
                    message:'Message sent',
                    clear:true

                });

                });
            }
          });
          //handle clear
          socket.on('clear',function(data){
            //remove all chats from the collections
            chat.remove({},function(){
                //emit cleared
                socket.emit('cleared');
            })
          })



    })
})

它给出了一个错误db.collection不是一个函数。我是socket.io的初学者。所以我找不到错误发生的确切原因。注意:我在32位Windows机器上运行mongoDB(我甚至努力安装它,但在堆栈溢出的帮助下完成)。我已经用教程代码交叉检查两次甚至三次。但是我无法解决它。请帮我解决这个错误。

node.js mongodb socket.io
1个回答
1
投票

您可能正在使用mongodb节点驱动程序的3.0版。这是一个新版本,因此很多教程现在都略显过时了。您可以使用npm list mongodb检查驱动程序的版本。

在旧版本中,这是代码:

mongo.connect('mongodb://127.0.0.1/mongochat', function(err, db){
  chat = db.collection('chats')
}

在3.0中,MongoClient.connect()将客户端对象传递给它的回调。所以现在是:

mongo.connect('mongodb://127.0.0.1/mongochat', function(err, client){
  chat = client.db.collection('chats')
}

请参阅3.0 here的更改日志。

当然,既然你命名你的socket.io客户端client,你需要为其中一个变量使用不同的名称,这样它们就不会发生冲突。

© www.soinside.com 2019 - 2024. All rights reserved.