gpt4 book ai didi

node.js - 使用 Socket.io 在 mongodb 中插入数据

转载 作者:可可西里 更新时间:2023-11-01 09:35:02 24 4
gpt4 key购买 nike

我正在开发简单的聊天应用程序,我想将消息存储在 mongoDb 中。但是当我运行这段代码时出现错误。无法读取未定义的属性“_id”。我已经创建了一个收藏调用聊天。

var MongoClient= require('mongodb').MongoClient;
var assert=require('assert');
var ObjectId= require('mongodb').ObjectId;
var bodyParser= require('body-parser');
var express = require('express'),
app=express();
server=require('http').createServer(app),
io= require('socket.io').listen(server),
app.use(bodyParser.urlencoded({extended:false}));
var mongo=require('mongodb');
users = {};
url='mongodb://localhost:27017/anant';

server.listen(9000, function(){
var host= server.address().address;
var port=server.address().port;

console.log("save app listen on http://%s:%s", host , port);
});

/*var server = app.listen(9000, function(){
var host= server.address().address;
var port=server.address().port;

console.log("save app listen on http://%s:%s", host , port);
});*/


app.get('/', function(req, res){
res.sendFile(__dirname + '/index.html');
});


io.sockets.on('connection', function(socket){
socket.on('new user', function(data , callback){
if(data in users){
callback(false);
}else{
callback(true);
socket.nickname= data;
users[socket.nickname]= socket;
updatenicknames();
}
});

io.sockets.on('send request', function(data , callback){
var name=data;
console.log(data);
});


socket.on('send message', function(data , callback){
var msg=data.trim();
if(msg.substr(0,3) === '/w '){
msg = msg.substr(3);
var ind = msg.indexOf(' ');
console.log(ind);
console.log("got it after ind ");
if(ind !== -1)
{
var name=msg.substr(0, ind);
var msg=msg.substring(ind + 1);
console.log(name);
console.log(msg);
if(name in users){
console.log("got it in if name condition");
users[name].emit('wishper', {msg: msg , nick: socket.nickname} );
console.log('whisper..! ');
} else
{
callback("enter a vlid user");
}
} else{
callback('please enter message for your wishper');
}
}else {
insertData(data);
io.sockets.emit('new message', {msg: msg , nick: socket.nickname} );
}
});

function updatenicknames(){
io.sockets.emit('usernames', Object.keys(users));
}

function insertData(data)
{

MongoClient.connect(url, function(err, db){
console.log(data);
db.collection('chat').save(data.msg , (err,result)=>{
if(err){
console.log("not inserted");
}else {
console.log("inserted");
}
});
});

}
socket.on('disconnect', function(data){
if(!socket.nickname) return;
delete users[socket.nickname];
updatenicknames();
});
});

最佳答案

这是因为您将 string data 传递给您的 insertData 函数(根据您的代码判断,我猜您假设 data 实际上是一个object).

然后你给 data.msg,这显然是 undefined,作为 save 方法的第一个参数,它期待你在此处提供有效的对象

另请注意,您正在对新创建的文档使用 save 方法,而不是使用 insertOne

正如您在 api documentation 中看到的那样,现在不推荐使用 save。 (我猜你使用的是最新版本,目前是 2.1)

关于node.js - 使用 Socket.io 在 mongodb 中插入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37476229/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com