Установка и первый сервер
Сервер на Fastify — это JavaScript-файл, который создаёт экземпляр приложения, добавляет маршрут и начинает слушать порт. Порт — номер, по которому клиент обращается к серверу, например 3000.
Создание проекта
Создайте папку проекта и установите Fastify:
mkdir blog-api
cd blog-api
npm init -y
npm install fastifynpm init -y создаёт package.json, а npm install fastify добавляет пакет в зависимости.
Включаем ES-модули
Откройте package.json и добавьте поле type и раздел scripts:
{
"name": "blog-api",
"type": "module",
"scripts": {
"dev": "node --watch src/server.js",
"start": "node src/server.js"
},
"dependencies": {
"fastify": "^5.0.0"
}
}"type": "module" разрешает import, а флаг --watch перезапускает сервер после каждого сохранения файла.
Первый сервер
Создайте файл src/server.js:
// src/server.js
import Fastify from 'fastify';
const app = Fastify({ logger: true });
app.get('/', async () => {
return { message: 'Привет от блога!' };
});
try {
await app.listen({ port: 3000 });
} catch (error) {
app.log.error(error);
process.exit(1);
}Fastify() создаёт приложение, app.get() добавляет маршрут, а app.listen() запускает сервер и возвращает промис. Обработчик возвращает объект — Fastify сам превращает его в JSON.
Запуск
npm run devВ терминале появится строка лога со словами Server listening at http://127.0.0.1:3000. Откройте этот адрес в браузере — вы увидите {"message":"Привет от блога!"}. Остановить сервер можно сочетанием Ctrl+C.
Логгер
Опция logger: true включает встроенный логгер. Каждый запрос записывается в терминал двумя строками в формате JSON: «incoming request» и «request completed» с кодом ответа и временем обработки. Подробнее логи разобраны в отдельном уроке.
Запрос из терминала
API удобно проверять не только браузером, но и программой curl:
curl http://localhost:3000/Команда выведет тот же JSON. В следующих уроках curl понадобится для запросов POST и DELETE, которые браузер из адресной строки отправить не может.
Частая ошибка
Если порт уже занят — например, сервер запущен во втором окне терминала, — listen завершится ошибкой EADDRINUSE. Остановите прежний процесс или выберите другой порт: app.listen({ port: 3001 }).