Noções Básicas de Express
10 exemplos para construir sua primeira API Express 5 - 7 básicos e 3 intermediários.
Busque em todas as páginas da documentação
10 exemplos para construir sua primeira API Express 5 - 7 básicos e 3 intermediários.
mkdir express-api && cd express-api
npm init -y
npm pkg set type=module
npm install express@5
npm install -D typescript@5.6 tsx @types/express @types/nodePara ordenação de middleware e reforço de segurança, consulte Ordenação de Middleware e Middleware de Segurança.
import express from "express";
const app = express();
const port = 3000;
app.get("/", (_req, res) => {
res.send("Hello from Express 5\n");
});
app.listen(port, () => {
console.log(`http://localhost:${port}`);
});app é uma função que envolve http.createServer do Noderes.send() define Content-Type automaticamente com base na carga útilimport express from "express";
const app = express();
app.use(express.json({ limit: "1mb" }));
app.post("/users", (req, res) => {
const { name, email } = req.body;
res.status(201).json({ id: 1, name, email });
});express.json() deve ser registrado antes das rotas que leem req.bodylimit para evitar ataques de carga útil grandesimport express from "express";
const app = express();
app.get("/users/:id", (req, res) => {
const { id } = req.params;
res.json({ id, name: "Ada Lovelace" });
});req.params contém segmentos de rota nomeadosid no manipulador ou em um middleware de validaçãoimport express from "express";
const app = express();
app.get("/search", (req, res) => {
const q = req.query.q as string | undefined;
const page = Number(req.query.page ?? 1);
res.json({ q, page, results: [] });
});req.query é analisado automaticamenteimport express, { Router } from "express";
const app = express();
const usersRouter = Router();
usersRouter.get("/", (_req, res) => {
res.json([{ id: 1, name: "Ada" }]);
});
usersRouter.get("/:id", (req, res) => {
res.json({ id: req.params.id });
});
app.use("/users", usersRouter);Router é um mini-aplicativo com sua própria pilha de middlewareimport express from "express";
const app = express();
app.use((req, _res, next) => {
console.log(`${req.method} ${req.url}`);
next();
});
app.get("/health", (_req, res) => {
res.json({ status: "ok" });
});next() para passar o controle para o próximo manipuladorimport express from "express";
import { join } from "node:path";
const app = express();
app.use("/static", express.static(join(import.meta.dirname, "public")));express.static serve arquivos de um diretórioimport express from "express";
const app = express();
app.get("/users/:id", async (req, res) => {
const user = await findUser(req.params.id);
if (!user) {
res.status(404).json({ error: "Not found" });
return;
}
res.json(user);
});
async function findUser(id: string) {
if (id === "999") return null;
return { id, name: "Ada" };
}express-async-errors ou invólucros try/catch manuaisimport express, { type Request, type Response, type NextFunction } from "express";
const app = express();
app.get("/fail", () => {
throw new Error("Something broke");
});
app.use((err: Error, _req: Request, res: Response, _next: NextFunction) => {
console.error(err);
res.status(500).json({ error: "Internal server error" });
});(err, req, res, next)import express from "express";
const app = express();
const port = Number(process.env.PORT ?? 3000);
const isDev = process.env.NODE_ENV !== "production";
if (isDev) {
app.use((req, _res, next) => {
console.log(`[dev] ${req.method} ${req.path}`);
next();
});
}
app.get("/health", (_req, res) => {
res.json({ env: process.env.NODE_ENV ?? "development" });
});
app.listen(port);PORT do ambiente (Heroku, Railway, K8s definem isso)NODE_ENVSim no Node 24 LTS. É a versão principal latest atual do npm. Migre do Express 4 usando os padrões do guia de migração oficial em Migração para Express 5.
Express se a familiaridade da equipe e o tamanho do ecossistema forem mais importantes. Fastify se a taxa de transferência e a validação de esquema JSON forem prioridades. Veja ADR Fastify vs Express.
app.listen é bom para a maioria dos aplicativos. Use createServer(app) quando precisar de acesso direto ao servidor subjacente para upgrades de WebSocket ou ajuste de tempo limite.
Routers por domínio (/users, /orders), serviços para lógica de negócios, app.ts e server.ts separados. Veja Melhores Práticas do Express.
Sim. Defina "type": "module" em package.json e use import express from "express".
Versões da Stack: Esta página foi escrita para Node.js 24.18.0 (LTS Ativo), npm 10+, TypeScript 5.6+, Express 5, Fastify 5 e NestJS 11.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026