Skip to content

2. CRUD

✅ Mapping custom event names to CRUD actions

Each event is just a string, so you can define events like:

ActionSocket Event Name
Createcreate_item
Readget_items
Updateupdate_item
Deletedelete_item

1. Server-Side

server.js
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 store
let 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.