Skip to content

Commit 5fc6130

Browse files
create the backend for the chat app
build chat server with express, websocket, GET and POST messages endpoints
1 parent 74f2bd0 commit 5fc6130

9 files changed

Lines changed: 1045 additions & 0 deletions

File tree

chat-app/server/.dockerignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
2+
/node_modules

chat-app/server/.gitignore

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Logs
2+
logs
3+
*.log
4+
npm-debug.log*
5+
yarn-debug.log*
6+
yarn-error.log*
7+
pnpm-debug.log*
8+
lerna-debug.log*
9+
10+
/node_modules
11+
dist
12+
dist-ssr
13+
*.local
14+
15+
# Editor directories and files
16+
.vscode/*
17+
!.vscode/extensions.json
18+
.idea
19+
.DS_Store
20+
*.suo
21+
*.ntvs*
22+
*.njsproj
23+
*.sln
24+
*.sw?

chat-app/server/Dockerfile

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
FROM node:20-alpine
2+
3+
WORKDIR /app
4+
5+
COPY package*.json ./
6+
7+
RUN npm install
8+
9+
COPY . .
10+
11+
EXPOSE 3000
12+
13+
CMD ["node", "index.js"]

chat-app/server/data/messages.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
const messages = [];
2+
module.exports = messages;
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
const messages = require("../data/messages");
2+
3+
const getMessage = (req, res) => {
4+
res.json(messages);
5+
};
6+
7+
module.exports = getMessage;
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
const { v4: uuidv4 } = require("uuid");
2+
const messages = require("../data/messages");
3+
4+
const postMessage = (req, res, wss) => {
5+
const { name, text } = req.body;
6+
7+
if (!name || !text) {
8+
return res.status(400).json({ error: "name and text are required" });
9+
}
10+
11+
const newMessage = {
12+
id: uuidv4(),
13+
name,
14+
text,
15+
timestamp: new Date().toLocaleTimeString([], {
16+
hour: "2-digit",
17+
minute: "2-digit",
18+
}),
19+
};
20+
21+
messages.push(newMessage);
22+
23+
wss.clients.forEach((client) => {
24+
if (client.readyState === 1) {
25+
client.send(JSON.stringify(newMessage));
26+
}
27+
});
28+
29+
res.status(201).json(newMessage);
30+
};
31+
32+
module.exports = postMessage;

chat-app/server/index.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
const http = require("http");
2+
const express = require("express");
3+
const { WebSocketServer } = require("ws");
4+
const cors = require("cors");
5+
const bodyParser = require("body-parser");
6+
7+
const app = express();
8+
const server = http.createServer(app);
9+
const wss = new WebSocketServer({ server });
10+
11+
const port = process.env.PORT || 3000;
12+
13+
app.use(bodyParser.json());
14+
app.use(bodyParser.urlencoded({ extended: true }));
15+
app.use(cors());
16+
17+
wss.on("connection", (ws) => {
18+
console.log("new client connected");
19+
20+
ws.on("close", () => {
21+
console.log("client disconnected");
22+
});
23+
});
24+
25+
app.get("/", (req, res) => {
26+
res.send(`Welcome to Beeko chat app server on port ${port}`);
27+
});
28+
29+
const getMessage = require("./endPoints/getMessage");
30+
const postMessage = require("./endPoints/postMessage");
31+
32+
app.get("/messages", getMessage);
33+
app.post("/messages", (req, res) => postMessage(req, res, wss));
34+
35+
server.listen(port, () => {
36+
console.log(`Server is running on Port: ${port}`);
37+
});

0 commit comments

Comments
 (0)