Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.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 如何在客户端从mongodb获取数据?_Javascript_Node.js_Reactjs_Mongodb - Fatal编程技术网

Javascript 如何在客户端从mongodb获取数据?

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

我无法在客户端显示数据。数据存储在mongodb集合中,但我无法在客户端发送数据。我想在客户端的两个用户之间发送对话数据,但我在控制台中得到的是空数组,为什么?server.js文件中的
.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);
    })
});