Обзор фреймворков
▸Express
Express — самый популярный Node.js фреймворк. Он минималистичный, гибкий и имеет огромную экосистему middleware.
▸Fastify
Fastify — высокопроизводительный фреймворк с фокусом на скорость. Использует JSON Schema для валидации и сериализации.
▸Hono
Hono — ультралёгкий фреймворк, работающий в Node.js, Deno, Bun и браузере. Минимальный bundle size.
Установка и базовая настройка
▸Express
1npm install express
1import express from 'express';2const app = express();34app.get('/', (req, res) => {5 res.json({ message: 'Привет мир' });6});78app.listen(3000);
▸Fastify
1npm install fastify
1import Fastify from 'fastify';2const app = Fastify();34app.get('/', async () => {5 return { message: 'Привет мир' };6});78app.listen({ port: 3000 });
▸Hono
1npm install hono
1import { Hono } from 'hono';2const app = new Hono();34app.get('/', (c) => {5 return c.json({ message: 'Привет мир' });6});78export default app;
Производительность
▸Бенчмарки
▸Почему Fastify быстрее
Middleware
▸Express middleware
1app.use(express.json());2app.use((req, res, next) => {3 console.log(req.method, req.url);4 next();5});
▸Fastify plugins
1await app.register(import('@fastify/cors'));2await app.register(import('@fastify/swagger'));
▸Hono middleware
1import { cors } from 'hono/cors';2import { logger } from 'hono/logger';34app.use('*', logger());5app.use('*', cors());
TypeScript
▸Express
1import express, { Request, Response } from 'express';23const app = express();45app.get('/users/:id', (req: Request, res: Response) => {6 const { id } = req.params;7 res.json({ id });8});
▸Fastify
1import Fastify from 'fastify';23const app = Fastify();45app.get<{6 Params: { id: string };7}>('/users/:id', async (req) => {8 return { id: req.params.id };9});
▸Hono
1import { Hono } from 'hono';23const app = new Hono();45app.get('/users/:id', (c) => {6 const id = c.req.param('id');7 return c.json({ id });8});
Валидация
▸Express + Joi
1import Joi from 'joi';23const schema = Joi.object({4 name: Joi.string().required(),5 email: Joi.string().email().required(),6});78app.post('/users', (req, res) => {9 const { error } = schema.validate(req.body);10 if (error) return res.status(400).json({ error: error.message });11 // ...12});
▸Fastify + JSON Schema
1const schema = {2 body: {3 type: 'object',4 required: ['name', 'email'],5 properties: {6 name: { type: 'string' },7 email: { type: 'string', format: 'email' },8 },9 },10};1112app.post('/users', { schema }, async (req) => {13 // req.body автоматически валидирован14});
Роутинг
▸Express
1const router = express.Router();2router.get('/', listUsers);3router.get('/:id', getUser);4app.use('/api/users', router);
▸Fastify
1app.register(async function(fastify) {2 fastify.get('/', listUsers);3 fastify.get('/:id', getUser);4}, { prefix: '/api/users' });
▸Hono
1const routes = new Hono();23routes.get('/', listUsers);4routes.get('/:id', getUser);56app.route('/api/users', routes);
Экосистема
▸Express
▸Fastify
▸Hono
Когда выбирать Express
Когда выбирать Fastify
Когда выбирать Hono
Заключение
Express — зрелый и проверенный. Fastify — быстрый и современный. Hono — ультралёгкий и кроссплатформенный. Выбирайте исходя из требований проекта и команды.