2. CRUD
✅ Mapping custom event names to CRUD actions
Each event is just a string, so you can define events like:
Action | Socket Event Name |
---|---|
Create | create_item |
Read | get_items |
Update | update_item |
Delete | delete_item |
1. Server-Side
const express = require('express');const http = require('http');const { Server } = require('socket.io');
const app = express();const server = http.createServer(app);const io = new Server(server);
// In-memory data storelet items = [];let idCounter = 1;
io.on('connection', (socket) => { console.log('Client connected');
// CREATE socket.on('create_item', (data) => { const item = { id: idCounter++, ...data }; items.push(item); socket.emit('item_created', item); });
// READ socket.on('get_items', () => { socket.emit('items_list', items); });
// UPDATE socket.on('update_item', ({ id, ...updates }) => { let item = items.find(i => i.id === id); if (item) { Object.assign(item, updates); socket.emit('item_updated', item); } else { socket.emit('error', 'Item not found'); } });
// DELETE socket.on('delete_item', (id) => { items = items.filter(i => i.id !== id); socket.emit('item_deleted', id); });});
server.listen(3000, () => { console.log('Server listening on http://localhost:3000');});
2. 🧪 Client-Side
<script src="/socket.io/socket.io.js"></script><script> const socket = io();
// CREATE socket.emit('create_item', { name: 'Apple', price: 3 });
// READ socket.emit('get_items'); socket.on('items_list', (items) => console.log('Items:', items));
// UPDATE socket.emit('update_item', { id: 1, name: 'Green Apple' });
// DELETE socket.emit('delete_item', 1);
// Notifications socket.on('item_created', item => console.log('Created:', item)); socket.on('item_updated', item => console.log('Updated:', item)); socket.on('item_deleted', id => console.log('Deleted ID:', id));</script>
🛡️ Notes
- WebSockets are event-based, not resource-based.
- There’s no standard CRUD pattern, so you define it yourself using clear naming.
- If you need RESTful semantics, you can mix Socket.IO with regular HTTP routes too.