Javascript 如何使用socket.io将数据从客户端插入服务器?

Javascript 如何使用socket.io将数据从客户端插入服务器?,javascript,node.js,reactjs,mongodb,Javascript,Node.js,Reactjs,Mongodb,我已经创建了mongochat数据库,其中包含chatcollection。如何在聊天室集合中插入文档?每个文档都有消息和日期作为键值对。文档模式,即消息模式是: message.js: const mongoose = require('mongoose'); const Schema = mongoose.Schema; // Create Schema const MessageSchema = new Schema({ message: { type: String,

我已经创建了
mongochat
数据库,其中包含
chat
collection。如何在聊天室集合中插入文档?每个文档都有消息和日期作为键值对。文档模式,即消息模式是:

message.js:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

// Create Schema
const MessageSchema = new Schema({
  message: {
    type: String,
    required: true
  },
  date: {
    type: Date,
    default: Date.now
  }
});

module.exports = Message = mongoose.model('Message', MessageSchema);
server.js:

const express = require('express');
const mongoose = require('mongoose');
const socket = require('socket.io');
const message = require('./model/message')

const app = express();

const db = require('./config/keys').mongoURI;

mongoose.connect(db, {useNewUrlParser: true})
  .then(() => console.log('Mongodb connected...'))
  .catch( err => console.log(err));

const port = 5000;

let server = app.listen(5000, function(){
  console.log('server is running on port 5000')
});

let io =  socket(server);

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('chats');  <-- this is collection

      socket.on('SEND_MESSAGE', data => {
        io.emit('RECEIVE_MESSAGE', data);
      });
})
const express=require('express');
const mongoose=require('mongoose');
const socket=require('socket.io');
const message=require(“./model/message”)
常量app=express();
const db=require('./config/keys')。mongoURI;
connect(db,{useNewUrlParser:true})
.then(()=>console.log('Mongodb connected…'))
.catch(err=>console.log(err));
常数端口=5000;
让服务器=app.listen(5000,函数(){
console.log('服务器正在端口5000上运行')
});
让io=套接字(服务器);
io.on(“连接”,功能(插座){
console.log(“使用ID:+Socket.ID建立的套接字连接”)
socket.on('disconnect',function()){
console.log('User Disconnected');
});
let chat=db.collection('chats'){
io.emit('接收消息',数据);
});
})
client.js:

    import React, { Component } from 'react'
import './chat.css'
import io from "socket.io-client";

export default class Chat extends Component {

    constructor(props){
        super(props);

        this.state = {
            message: '',
            date: '',
            messages: []
        };

        const socket = io('localhost:5000');

        this.sendMessage = event => {
            event.preventDefault();

            if(this.state.message !== ''){
                socket.emit('SEND_MESSAGE', {
                    message: this.state.message,
                    date: Date.now()
                });
                this.setState({ message: '', date: '' });
            }
        };

        socket.on('RECEIVE_MESSAGE', data => {
            addMessage(data);
        });

        const addMessage = data => {
            console.log(data);
            this.setState({
              messages: [...this.state.messages, data],
            });
            console.log(this.state.message);
            console.log(this.state.messages);
        };

    }

    render() {
        return (
        <div>              
    <div id="messages" className="card-block">
           {this.state.messages.map((message, index) => {
            return (
              <div key={index} className="msgBox"><p className="msgText">{message.message}</p></div>
            )
          })}
    </div>
         <input id="inputmsg" type="text" placeholder="Enter Message...."
         value={this.state.message} onChange={ev => this.setState({message: ev.target.value})}/>
    <button id="send" className="button" onClick={this.sendMessage}>Send</button>               
        </div>
        )
    }
}
import React,{Component}来自“React”
导入“./chat.css”
从“socket.io客户端”导入io;
导出默认类聊天扩展组件{
建造师(道具){
超级(道具);
此.state={
消息:“”,
日期:'',
信息:[]
};
const socket=io('localhost:5000');
this.sendMessage=事件=>{
event.preventDefault();
如果(this.state.message!=''){
socket.emit('SEND_MESSAGE'{
消息:this.state.message,
日期:date.now()
});
this.setState({消息:'',日期:'});
}
};
socket.on('RECEIVE_MESSAGE',data=>{
添加消息(数据);
});
const addMessage=数据=>{
控制台日志(数据);
这是我的国家({
消息:[…this.state.messages,data],
});
console.log(this.state.message);
console.log(this.state.messages);
};
}
render(){
返回(
{this.state.messages.map((消息,索引)=>{
返回(

{message.message}

) })} this.setState({message:ev.target.value})}/> 发送 ) } }
当您收到邮件时,将其正文保存到您的收藏中,如下所示:

let chat = db.collection('chats');  <-- this is collection

  socket.on('SEND_MESSAGE', data => {
    const instance = new chat(data); <-- data as { message: '', date: '' }
    try {
        const result = await instance.save();
    } catch(...)
  });
 })
let chat=db.collection('chats');{

const instance=new chat(data);当您收到消息时,将其正文保存到您的集合中,如下所示:

let chat = db.collection('chats');  <-- this is collection

  socket.on('SEND_MESSAGE', data => {
    const instance = new chat(data); <-- data as { message: '', date: '' }
    try {
        const result = await instance.save();
    } catch(...)
  });
 })
let chat=db.collection('chats'){

const实例=新聊天(数据);因此,您编写的代码将把数据保存到mongodb中,但是如果try block成功,我如何为event->
RECEIVE_MESSAGE
@funjoker发出数据事件?如果try block成功,您可以在该block内发出数据事件在我的情况下,我无法理解创建新消息后,
SEND_MESSAGE
RECEIVE_MESSAGE
将如何工作例如,我如何将更新后的数据发送回显示器?因此,您编写的代码将把数据保存到mongodb中,但我如何为事件发出该数据->
接收\u消息
@funjoker如果try block成功,您可以在该块内发出数据事件在我的情况下,我无法理解
如何发送\u消息
RECEIVE_MESSAGE
是否有效?创建新实例后,如何将更新后的数据发送回显示器?