Перейти к основному содержимому

Сервер вызывает вас

Веб-сервер на Node.js строится из обработчиков: функций вида (req: IncomingMessage, res: ServerResponse) => void из встроенного модуля node:http. Сервер принимает соединения и вызывает ваш обработчик один раз на каждый запрос — req содержит всё о запросе, а всё, что вы запишете в res, становится ответом.

Настоящий сервер запускается вызовом server.listen(8080) и работает бесконечно. Примеры здесь вместо этого вызывают server.listen(0): порт 0 означает «любой свободный порт», поэтому конфликтов не будет. Затем каждый пример читает реальный порт, сам отправляет запрос с помощью fetch и вызывает server.close() — так что каждая программа запускается и завершается сама.


Первый обработчик

Самый маленький из возможных обработчиков выводит строку текста. Всё, что делает API — JSON, коды состояния, маршрутизация — происходит внутри этой же формы функции.

Привет от обработчика

Обработчик пишет в res; клиент читает именно это как тело ответа, а статус 200 OK подставляется автоматически.

Prompt
Напишите программу на TypeScript с максимально простым обработчиком node:http, который выводит приветственную строку. Запустите его на порту 0, отправьте один GET-запрос с помощью fetch, выведите статус и тело ответа и закройте сервер.
Вывод: программа на TypeScript и захваченный вывод

Ответ в формате JSON

Обработчик API делает три вещи: устанавливает заголовок Content-Type, выбирает код состояния и записывает данные. res.writeHead(200, { "Content-Type": "application/json" }) делает первые два, а res.end(JSON.stringify(value)) записывает тело.

Порядок важен: статус и заголовки должны быть установлены до записи тела.

Конечная точка JSON

Обработчик превращает UserRecord в текст JSON и отправляет его. Клиент получает корректный JSON и правильный тип содержимого — это основа каждой конечной точки в остальной части этой группы.

Prompt
Напишите программу на TypeScript с обработчиком, который отвечает объектом UserRecord в формате JSON, устанавливая статус и заголовок Content-Type с помощью res.writeHead. Запустите его на порту 0, выполните запрос с помощью fetch и выведите статус, тип содержимого и тело JSON.
Вывод: программа на TypeScript и захваченный вывод