node.js - 使用 Reactjs 和 nodejs 从列表中添加和删除用户
问题描述
嗨,我有一个聊天应用程序,使用Nodejs
and创建ReactJs
。目前我正在JSON
files
使用storage
. 在这个应用程序中,我有两个tabs
,chat tab
和users tab
. chat tab
包含所有chated users or recent chated
用户并且包含users tab
所有registered users
. 当user
在users tab
并且如果他clicks
在任何地方user
,我将把toggling tab
用户chat tab
添加到文件的顶部,chatedusers.json
如果user
不存在并且如果用户存在那么我不添加。现在我想如果 theuser sends
或message
anyuser receives
然后message
添加用户,chat tab
否则不要添加到chat tab
.
//users.json
[
{
"id": "100",
"name": "user1"
},
{
"id": "200",
"name": "user2"
},
{
"id": "300",
"name": "user3"
},
{
"id": "400",
"name": "user4"
},
{
"id": "500",
"name": "user5"
},
{
"id": "600",
"name": "user6"
},
{
"id": "700",
"name": "user7"
}
]
//chatedusers.json
[
{
"id": "100",
"name": "user1"
},
{
"id": "200",
"name": "user2"
},
]
//messages.json
[
{
"sender": 100,
"receiver": 200,
"message": "lets do something"
},
{
"sender": 100,
"receiver": 200,
"message": "second message"
}
,{
"sender": 200,
"receiver": 100,
"message": "ok"
}
]
//Users.js
import React, { useEffect, useState } from "react";
import "./All.css";
import ShowSingle from "./ShowSingle";
import axios from "axios";
import { useDispatch } from "react-redux";
import { setTabPane } from "./actions";
function Users() {
const dispatch = useDispatch();
const [users, setUsers] = useState();
const [loading, setLoading] = useState(true);
useEffect(() => {
axios
.get("http://localhost:3005/all")
.then(function (response) {
setUsers(response.data);
console.log("users" + JSON.stringify(response.data));
setLoading(false);
})
.catch(function (error) {
console.log(error);
setLoading(false);
});
}, []);
const clickHandler = () => {
dispatch(setTabPane("chat"));
};
const addToRecents = (user) => {
console.log("users", user);
axios
.post("http://localhost:3005/add", user)
.then((response) => console.log("added to chat"))
.catch((error) => {
console.error("There was an error!", error);
});
};
return (
<div>
{!loading &&
users.map((user, id) => (
<ShowSingle
key={id}
user={user}
click={clickHandler}
addToRecents={addToRecents}
/>
))}
</div>
);
}
export default Users;
//chated.js //这包含聊天的用户
import React, { useEffect, useState } from "react";
import axios from "axios";
import ShowSingle from "./ShowSingle";
import ShowRecentSingle from "./ShowRecentSingle";
function ChatedList() {
const [users, setUsers] = useState();
const [loading, setLoading] = useState(true);
useEffect(() => {
axios
.get("http://localhost:3005/")
.then(function (response) {
setUsers(response.data);
console.log("users" + JSON.stringify(response.data));
setLoading(false);
})
.catch(function (error) {
console.log(error);
setLoading(false);
});
}, []);
return (
<div>
{!loading &&
users.map((user, id) => <ShowRecentSingle key={id} user={user} />)}
<input
type="text"
name="message"
id=""
className="message-input"
placeholder="type new message....."
/>
</div>
);
}
export default ChatedList;
//server.js //这包含所有的api路由
var express = require("express");
var app = express();
var bodyParser = require("body-parser");
var cors = require("cors");
var usrs = require("./chatedlist.json");
var all = require("./alluser.json");
var messages = require("./messages.json");
app.use(express.json());
app.use(
cors({
origin: "http://127.0.0.1:3000",
})
);
app.get("/", function (req, res) {
res.json(usrs);
});
app.get("/all", function (req, res) {
res.json(all);
});
app.get("/allmessages", function (req, res) {
res.json(messages);
});
app.post("/add", function (req, res) {
var user = req.body;
var hasMatch = false;
for (var index = 0; index < usrs.length; ++index) {
var check = usrs[index];
if (check.id == user.id) {
hasMatch = true;
break;
}
}
if (!hasMatch) {
usrs.unshift(user);
res.send("User has been added successfully");
} else {
res.send("User exists already");
}
});
app.listen(3005, () => console.log("server listening on 3005"));
解决方案
推荐阅读
- next.js - 边距的第一个/最后一个子级在 Next.js、Tailwindcss 环境中不起作用
- java - 条纹:在订阅时设置连接帐户时出现问题
- laravel - 未捕获的错误:尝试访问 octobercms 中的配置数据时未找到类“事件”
- java - 弱引用和线程
- python - 以 0 作为输入的范围函数循环如何工作?
- elasticsearch - \Kibana\config 此时出乎意料
- python - 无法通过 pip3 macOS 安装 Spyder 或 Jupyter
- google-drive-api - 有没有办法在 Google Colab 中清理 Google Drive 垃圾桶?
- c++ - 获取 mtu C++ 便携方式
- java - 网站是否必须保存图像才能从中获取文本?