# The Express Guide

> Express is the classic Node.js web framework. Learn routing, middleware, forms, sessions and building REST APIs with this curated guide.

Author: [Flavio Copes](https://flaviocopes.com/about/) | Published: 2018-05-27 | Updated: 2026-07-14 | Topics: [Express.js](https://flaviocopes.com/tags/express/) | Canonical: https://flaviocopes.com/express/

Express is a web framework for Node.js. It gives you a simple way to handle HTTP requests: define a route, write a function, send a response.

It's been around forever, and that's a feature. Express is stable, minimal, and the patterns you learn with it transfer to almost every other backend framework.

This page is your starting point for Express on this site. The posts below take you from your first server to a working REST API.

## Where to start

Follow these in order:

1. [Routing in Express](https://flaviocopes.com/express-routing/) is the core concept: matching URLs to functions
2. [Send a response using Express](https://flaviocopes.com/express-send-response/) covers how to reply to requests
3. [Send a JSON response using Express](https://flaviocopes.com/express-send-json-response/) is what you'll do most when building APIs
4. [Express, Request Parameters](https://flaviocopes.com/express-request-parameters/) shows you everything the request object carries
5. [Express Middleware](https://flaviocopes.com/express-middleware/) explains the pattern the whole framework is built on

## Handling input

Reading data from the client, and never trusting it:

- [Retrieve the GET query string parameters using Express](https://flaviocopes.com/express-get-query-variables/)
- [Retrieve the POST query parameters using Express](https://flaviocopes.com/express-post-query-variables/)
- [Handling forms in Express](https://flaviocopes.com/express-forms/)
- [Handling file uploads in forms using Express](https://flaviocopes.com/express-forms-files/)
- [Validating input in Express using express-validator](https://flaviocopes.com/express-validate-input/)
- [Sanitizing input in Express using express-validator](https://flaviocopes.com/express-sanitize-input/)

## Responses, headers and files

More ways to shape what you send back:

- [Work with HTTP headers in Express](https://flaviocopes.com/express-headers/)
- [Handling redirects with Express](https://flaviocopes.com/express-redirects/)
- [Send files using Express](https://flaviocopes.com/express-send-files/)
- [Serving Static Assets with Express](https://flaviocopes.com/express-static-assets/)
- [Express Templates](https://flaviocopes.com/express-templating/)

## State and security

Keeping track of users, and serving your app safely:

- [Express Sessions](https://flaviocopes.com/express-sessions/)
- [Manage Cookies with Express](https://flaviocopes.com/express-cookies/)
- [Handling CORS in Express](https://flaviocopes.com/express-cors/)
- [An Express HTTPS server with a self-signed certificate](https://flaviocopes.com/express-https-self-signed-certificate/)
- [Setup Let's Encrypt for Express](https://flaviocopes.com/express-letsencrypt-ssl/)

## Build something real

Once the pieces make sense, put them together: [Build a REST API using Node.js, Express and MongoDB](https://flaviocopes.com/rest-api-express-mongodb/) walks through a complete backend from scratch.

## Go deeper

If you want all of this in one structured, readable package, download the free [Express Handbook](https://flaviocopes.com/ebooks/express-handbook/). It covers the framework from setup to production patterns.

Everything I wrote about Express is in [the express tag](https://flaviocopes.com/tags/express/).
