Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript db.collection不是一个函数(MongoDB 3+;)_Javascript_Node.js_Mongodb_Socket.io - Fatal编程技术网

Javascript db.collection不是一个函数(MongoDB 3+;)

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…)

我正在使用MongoDB和Socket.io制作聊天应用程序;然而,我已经在这个问题上停留了很长一段时间。每次我运行我的服务器
node server.js
时,我都会通过
console.log('MongoDB connected…)
如果有人能看一下我的代码,看看我是否有任何错误。谢谢

服务器端(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示例。

您没有实例化客户端。有关示例,请参见。