这个问题在这里已有答案:
我正在跟进一个教程,使用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(我甚至努力安装它,但在堆栈溢出的帮助下完成)。我已经用教程代码交叉检查两次甚至三次。但是我无法解决它。请帮我解决这个错误。
您可能正在使用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
,你需要为其中一个变量使用不同的名称,这样它们就不会发生冲突。