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
是否有效?创建新实例后,如何将更新后的数据发送回显示器?