├── .gitignore ├── README.md ├── initRedis.js ├── repository.js ├── package.json ├── views ├── login.ejs └── chat.ejs └── index.js /.gitignore: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # redis-socketIO 2 | -------------------------------------------------------------------------------- /initRedis.js: -------------------------------------------------------------------------------- 1 | import { createClient } from 'redis' 2 | 3 | export const redis = createClient() 4 | redis.on('error', (error) => console.error(error)) 5 | await redis.connect(); -------------------------------------------------------------------------------- /repository.js: -------------------------------------------------------------------------------- 1 | import { Schema, Repository } from 'redis-om' 2 | import { redis } from './initRedis.js' 3 | 4 | const schema = new Schema('person', { 5 | username: { type: 'string' }, 6 | message: { type: 'string' } 7 | }) 8 | 9 | export const personRepository = new Repository(schema, redis) 10 | 11 | await personRepository.createIndex() -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mini-chat", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "nodemon index.js", 8 | "test": "echo \"Error: no test specified\" && exit 1" 9 | }, 10 | "author": "", 11 | "type":"module", 12 | "license": "ISC", 13 | "dependencies": { 14 | "ejs": "^3.1.9", 15 | "express": "^4.18.2", 16 | "redis": "^4.6.7", 17 | "redis-om": "^0.4.2", 18 | "socket.io": "^4.7.2" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /views/login.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | login 8 | 9 | 10 |
11 | 12 |
13 |
14 | 15 |
16 | 17 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | const http = require('http'); 3 | const ejs = require("ejs"); 4 | const socketIO = require("socket.io"); 5 | const port = 2000; 6 | const app = express(); 7 | app.set("view engine", "ejs"); 8 | const server = http.createServer(app); 9 | const io = socketIO(server, { cors: { origin: "*" } }); 10 | import { EntityId } from 'redis-om' 11 | import { personRepository as repository } from './repository.js' 12 | io.on("connection", socket => { 13 | socket.on("message", async ({ username, message }) => { 14 | const result = await repository.save({ username, message }); 15 | console.log(result); 16 | io.emit("message", { username, message }); 17 | }) 18 | }) 19 | app.get("/", (req, res) => { 20 | res.render("login"); 21 | }) 22 | app.get("/chat", (req, res) => { 23 | const { username } = req.query; 24 | res.render("chat", { username }) 25 | }) 26 | 27 | 28 | server.listen(port, () => { 29 | console.log(`server run on port ${port}`); 30 | }) 31 | 32 | -------------------------------------------------------------------------------- /views/chat.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Chat 8 | 9 | 10 |

Redis Chat

11 |
12 | 13 |
14 |
15 |
16 | 17 |
18 | 19 | 32 | 33 | --------------------------------------------------------------------------------