0
0
ExpressHow-ToBeginner · 4 min read

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 or app.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, causing req.body to 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.