[英]How can I store data in mongodb using nodejs / express?
我已經使用socket.io創建了聊天應用程序,並且正在存儲消息數組。 每個數組對象都有message
和date
。 聊天應用程序僅在客戶端運行,即當我刷新頁面時,以前的所有聊天記錄都消失了。 如何以編程方式存儲消息? 在客戶端使用mongodb,nodejs / express和reactjs?
碼:
server.js:
const express = require('express');
const mongoose = require('mongoose');
const socket = require('socket.io');
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('SEND_MESSAGE', data => {
io.emit('RECEIVE_MESSAGE', data);
});
})
messageSchema.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);
chat.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="status"></div>
<div id="chat">
<div className="card">
<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>
</div>
<div className="row">
<div className="column">
<input id="inputmsg" type="text" placeholder="Enter Message...."
value={this.state.message} onChange={ev => this.setState({message: ev.target.value})}/>
</div>
<div className="column2">
<button id="send" className="button" onClick={this.sendMessage}>Send</button>
</div>
</div>
</div>
</div>
)
}
}
屏幕截圖:
我應該在server.js和chat.js中進行哪些修改,以便將聊天消息存儲在mongodb數據庫中。 我是否需要創建API端點來存儲和檢索以前的聊天記錄? 注意:我已經在mlab中用數據庫名稱mongochat
和集合名稱= chat
設置了mongodb。
您可以嘗試編輯server.js,然后執行以下操作:
var messageSchema = require("path/to/schema");
.
.
.
socket.on('SEND_MESSAGE', data => {
io.emit('RECEIVE_MESSAGE', data);
var newDate = new Date();
const message = new messageSchema({
'message': data,
'date': newDate
})
message.save((err, data) => {
if(err) //do something
else // do whatever you want
})
});
您還可以創建中間件,以在MongoDB和APP之間為您提供簡單的服務。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.