Project Structure

Express REST API Structure

A maintainable Node.js API can separate routing, controllers, services, repositories, validation, middleware, configuration, and infrastructure.

Example:

src/
  routes/
  controllers/
  services/
  repositories/
  middleware/
  validators/
  errors/
  config/
  app.js
  server.js

The exact structure is less important than maintaining clear boundaries. Avoid turning routes.js into a file containing database queries, authentication, validation, business rules, and response formatting.

Express Router
const router = express.Router();

router.get('/users/:id', authenticate, userController.getById);
router.post('/users', authenticate, validate(createUserSchema), userController.create);
router.patch('/users/:id', authenticate, validate(updateUserSchema), userController.update);
router.delete('/users/:id', authenticate, userController.remove);
💡 Routing remains focused on composing middleware and mapping HTTP requests to controllers.