Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Установка и первый сервер

Сервер на Fastify — это JavaScript-файл, который создаёт экземпляр приложения, добавляет маршрут и начинает слушать порт. Порт — номер, по которому клиент обращается к серверу, например 3000.

Создание проекта

Создайте папку проекта и установите Fastify:

mkdir blog-api
cd blog-api
npm init -y
npm install fastify

npm 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 }).

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.