Javascript db.collection不是一个函数(MongoDB 3+;)
我正在使用MongoDB和Socket.io制作聊天应用程序;然而,我已经在这个问题上停留了很长一段时间。每次我运行我的服务器Javascript db.collection不是一个函数(MongoDB 3+;),javascript,node.js,mongodb,socket.io,Javascript,Node.js,Mongodb,Socket.io,我正在使用MongoDB和Socket.io制作聊天应用程序;然而,我已经在这个问题上停留了很长一段时间。每次我运行我的服务器node server.js时,我都会通过console.log('MongoDB connected…)
node server.js
时,我都会通过console.log('MongoDB connected…)但是当它到达db.collection时,抛出一个错误,告诉我它不是一个函数
如果有人能看一下我的代码,看看我是否有任何错误。谢谢
服务器端(Server.js)
const mongo=require('mongodb')。MongoClient;
const client=require('socket.io').listen(4000).sockets;
//连接到mongo
mongo.connect('mongodb://127.0.0.1/uchat“,{useNewUrlParser:true},函数(err,db){
如果(错误){
犯错误;
}
log('MongoDB connected…');
//连接到Socket.io
client.on('connection',函数(socket){
let chat=db.collection('chats');
//创建发送状态的函数
sendStatus=功能{
socket.emit('status',s);
}
//从mongo collection获取聊天记录
chat.find().limit(100).sort({u id:1}).toArray(函数(err,res){
如果(错误){
犯错误;
}
//如果没有错误,则发出消息
socket.emit('output',res);
});
//处理输入事件
socket.on('input',函数(数据){
让name=data.name;
let message=data.message;
//检查名称和消息
如果(名称=“”| |消息=“”){
//发送错误消息
sendStatus('请输入名称和消息');
}否则{
//插入消息
insert({name:name,message:message},function()){
client.emit('output',[data]);
//发送状态对象
发送状态({
消息:“已发送消息”,
清楚:是的
})
});
}
});
//处理清晰的信息
socket.on('clear',函数(数据){
//从集合中删除所有聊天记录
删除({},函数(){
//让用户知道
socket.emit('cleared');
});
});
});
});
客户端(index.html)
#消息{高度:300px;}
乌恰特
乌恰特
清楚的
(功能(){
变量元素=函数(id){
返回文档.getElementById(id);
}
//获取元素
变量状态=元素(“状态”);
var messages=元素('messages');
var textarea=元素('textarea');
var username=元素('username');
var clear=元素(“clear”);
//设置默认状态
var statusDefault=status.textContent;
var setStatus=功能{
//设定状态
status.textContent=s;
//如果状态不等于默认值4s后清除
如果(s!==状态默认值){
var delay=setTimeout(函数(){
设置状态(默认状态);
}, 4000);
}
}
//连接到Socket.io服务器
var socket=io.connect('http://127.0.0.1:4000');
//检查连接
if(套接字!==未定义){
log('连接到Socket.io…');
}
})();
package.json文件
{
"name": "uchat",
"version": "1.0.0",
"description": "Simple Chat App",
"main": "server.js",
"scripts": {
"start": "node server.js"
},
"author": "Hunter Shaw",
"license": "ISC",
"dependencies": {
"mongodb": "*",
"socket.io": "*"
}
}
我计划远程连接到我的服务器,就像我计划以后使用我从PhoneGap中学到的一样
谢谢你的帮助
终端错误
$ node server.js
MongoDB connected...
C:\Users\hunte\Desktop\uChat\server.js:15
let chat = db.collection('chats');
^
TypeError: db.collection is not a function
at Namespace.<anonymous> (C:\Users\hunte\Desktop\uChat\server.js:15:23)
at Namespace.emit (events.js:182:13)
at Namespace.emit (C:\Users\hunte\Desktop\uChat\node_modules\socket.io\lib\namespace.js:213:10)
at C:\Users\hunte\Desktop\uChat\node_modules\socket.io\lib\namespace.js:181:14
at process._tickCallback (internal/process/next_tick.js:61:11)
$node server.js
MongoDB已连接。。。
C:\Users\hunte\Desktop\uChat\server.js:15
let chat=db.collection('chats');
^
TypeError:db.collection不是函数
在命名空间处。(C:\Users\hunte\Desktop\uChat\server.js:15:23)
位于Namespace.emit(events.js:182:13)
位于Namespace.emit(C:\Users\hunte\Desktop\uChat\node\u modules\socket.io\lib\Namespace.js:213:10)
位于C:\Users\hunte\Desktop\uChat\node\u modules\socket.io\lib\namespace.js:181:14
在进程中。_tick回调(内部/process/next_tick.js:61:11)
这是因为当你连接时,你没有得到err
和db
对象,你得到的是err
和client
对象
所以基本上你要做的是:
let db = client.db("YOUR_DB_NAME")
let chat = db.collection("chat")
然后它就会起作用
您应该看看mongodb文档,尤其是connect示例。您没有实例化客户端。有关示例,请参见。