How to Create a CRUD API in Express: Simple Guide
To create a CRUD API in
Express, define routes for Create (POST), Read (GET), Update (PUT), and Delete (DELETE) operations. Use express.json() middleware to parse JSON requests and manage data in memory or a database.Syntax
Each CRUD operation corresponds to an HTTP method and a route in Express:
- Create:
app.post('/items', handler)to add new data. - Read:
app.get('/items')to get all items orapp.get('/items/:id')to get one item. - Update:
app.put('/items/:id', handler)to modify existing data. - Delete:
app.delete('/items/:id', handler)to remove data.
Use express.json() middleware to read JSON bodies from requests.
javascript
import express from 'express'; const app = express(); app.use(express.json()); // Create app.post('/items', (req, res) => { /* add item */ }); // Read all app.get('/items', (req, res) => { /* return all items */ }); // Read one app.get('/items/:id', (req, res) => { /* return item by id */ }); // Update app.put('/items/:id', (req, res) => { /* update item by id */ }); // Delete app.delete('/items/:id', (req, res) => { /* delete item by id */ }); app.listen(3000, () => console.log('Server running on port 3000'));
Example
This example shows a simple in-memory CRUD API for managing a list of items with id and name. It supports adding, reading, updating, and deleting items.
javascript
import express from 'express'; const app = express(); app.use(express.json()); let items = []; let nextId = 1; // Create app.post('/items', (req, res) => { const { name } = req.body; if (!name) return res.status(400).json({ error: 'Name is required' }); const newItem = { id: nextId++, name }; items.push(newItem); res.status(201).json(newItem); }); // Read all app.get('/items', (req, res) => { res.json(items); }); // Read one app.get('/items/:id', (req, res) => { const id = Number(req.params.id); const item = items.find(i => i.id === id); if (!item) return res.status(404).json({ error: 'Item not found' }); res.json(item); }); // Update app.put('/items/:id', (req, res) => { const id = Number(req.params.id); const { name } = req.body; const item = items.find(i => i.id === id); if (!item) return res.status(404).json({ error: 'Item not found' }); if (!name) return res.status(400).json({ error: 'Name is required' }); item.name = name; res.json(item); }); // Delete app.delete('/items/:id', (req, res) => { const id = Number(req.params.id); const index = items.findIndex(i => i.id === id); if (index === -1) return res.status(404).json({ error: 'Item not found' }); items.splice(index, 1); res.status(204).send(); }); app.listen(3000, () => console.log('Server running on port 3000'));
Output
Server running on port 3000
Common Pitfalls
Common mistakes when creating a CRUD API in Express include:
- Not using
express.json()middleware, causingreq.bodyto be undefined. - Forgetting to parse route parameters as numbers when needed.
- Not handling missing or invalid data in requests, leading to server errors.
- Not sending proper HTTP status codes (e.g., 201 for creation, 404 for not found).
- Mutating data incorrectly or not updating the in-memory store.
Always validate input and handle errors gracefully.
javascript
/* Wrong: Missing express.json() middleware */ import express from 'express'; const app = express(); app.post('/items', (req, res) => { // req.body will be undefined res.json(req.body); }); /* Right: Add express.json() middleware */ app.use(express.json());
Quick Reference
Remember these key points when building a CRUD API with Express:
- Use
app.use(express.json())to parse JSON bodies. - Match HTTP methods to CRUD:
POST(Create),GET(Read),PUT(Update),DELETE(Delete). - Validate input data and handle errors with proper status codes.
- Use route parameters (e.g.,
:id) to identify resources. - Send meaningful responses and status codes for client feedback.
Key Takeaways
Use express.json() middleware to parse JSON request bodies.
Define routes with correct HTTP methods for each CRUD operation.
Validate input and handle errors with proper HTTP status codes.
Use route parameters to identify specific resources.
Test your API endpoints to ensure correct behavior.