Javascript 如何在客户端从mongodb获取数据?
我无法在客户端显示数据。数据存储在mongodb集合中,但我无法在客户端发送数据。我想在客户端的两个用户之间发送对话数据,但我在控制台中得到的是空数组,为什么?server.js文件中的Javascript 如何在客户端从mongodb获取数据?,javascript,node.js,reactjs,mongodb,Javascript,Node.js,Reactjs,Mongodb,我无法在客户端显示数据。数据存储在mongodb集合中,但我无法在客户端发送数据。我想在客户端的两个用户之间发送对话数据,但我在控制台中得到的是空数组,为什么?server.js文件中的.find()错误吗?我添加了server.js和chat.js(我想在其中显示数据的客户端文件) server.js: io.on("connection", function(socket){ console.log("Socket Connection Established with ID :"+ s
.find()
错误吗?我添加了server.js和chat.js(我想在其中显示数据的客户端文件)
server.js:
io.on("connection", function(socket){
console.log("Socket Connection Established with ID :"+ socket.id)
socket.on('disconnect', function(){
console.log('User Disconnected');
});
let chat = db.collection('chat');
let conversation = db.collection('conversation');
let user1,user2;
socket.on('GET_USER', function (data) {
console.log(data);
user2 = data.user2;
});
socket.on('LOGGEDIN_USER', function(data) {
console.log(data);
user1 = data.user1;
});
socket.on('SEND_MESSAGE', function(data){
let author = data.author;
let message = data.message;
let date = data.date;
// Check for name and message
if(author !== '' || message !== '' || date !== ''){
// Insert message
chat.insert({author:author, message: message, date:date}, function(){
io.emit('RECEIVE_MESSAGE', [data]);
});
conversation.findOne({ $and :[{user1: user1}, {user2: user2}] }, function (err, existingConversation){
if(existingConversation === null){
conversation.insert({user1: user1, user2: user2, conversation: [{author: author, message: message, date:date}] })
}else{
conversation.update({user1: user1, user2: user2},
{$push: {conversation : { author : author ,message : message,date : date }} })
}
})
}
});
conversation.find({ $and : [ {user1: user1}, {user2: user2} ] }).sort({_id: 1}).toArray(function (err, res) {
if(err){
throw err;
}
// Emit the messages
io.emit('RECEIVE_MESSAGE', res);
})
})
chat.js:
componentDidMount() {
this.props.fetchUsers();
this.socket.on('RECEIVE_MESSAGE', data => {
console.log(data); <--- This shows empty array in browser console
this.addMessage(data);
});
}
sendMessage(event) {
event.preventDefault();
if(this.state.message !== ''){
this.socket.emit('SEND_MESSAGE', {
author: this.props.match.params.user,
message: this.state.message,
date: Date.now()
});
this.socket.emit('LOGGEDIN_USER', { user1: this.props.match.params.user});
}
};
addMessage(data) {
this.props.saveAuthor(this.props.match.params.user)
this.props.saveMessages(data)
this.setState({
message: ''
});
};
handleClick = (userName) => {
this.socket.emit('GET_USER', { user2: userName });
}
截图:
Hmm,您调用
对话。在连接事件的“同一”时间内查找({user1:user1})
,然后user1
现在是未定义的。您可以在查询上方放置console.log(user1)
,以检查user1值:
console.log("Before find user query: ", user1)
conversation.find({ user1: user1 })....
输出日志=>在查找用户查询之前:未定义
,这就是您发送给客户端的数据是空数组的原因
修补程序:当您真正获得user1
socket.on('LOGGEDIN_USER', function (data) {
console.log(data);
user1 = data.user1;
conversation.find({ user1: user1 }).sort({ _id: 1 }).toArray(function (err, res) {
if (err) {
throw err;
}
// Emit the messages
io.emit('RECEIVE_MESSAGE', res);
})
});
如果查询是conversation.find({$and:[{{user1:user1},{user2:user2}]}),如何获取数据{
?我已经更新了问题,请查看您可以在事件LOGGEDIN\u USER
和GET\u USER
上进行查询,在进行查询之前只需检查user1和&user2
。我无法在客户端显示数据?为什么?我没有在浏览器控制台中接收到数据。请在此提供帮助->
socket.on('LOGGEDIN_USER', function (data) {
console.log(data);
user1 = data.user1;
conversation.find({ user1: user1 }).sort({ _id: 1 }).toArray(function (err, res) {
if (err) {
throw err;
}
// Emit the messages
io.emit('RECEIVE_MESSAGE', res);
})
});