Я создал инструмент, который позволяет мне искать определения кодов состояния HTTP в автономном режиме и прямо из командной строки.

Я хочу отдать должное https://httpstatuses.com/ за исключительно полезный ресурс, доступный без рекламы.

Настраивать

Установите модуль npm глобально

npm install -g stts

Теперь вы должны иметь возможность использовать его, набрав stts, а затем любой код HTTP, для которого вы хотите быстро определить. Пример:

stts 301

Делаем мой первый модуль npm

Я люблю создавать небольшие инструменты, которые облегчают жизнь, поэтому я сделал этот простой автономный справочный инструмент. На самом деле я использую его чаще, чем ожидал, и это на удивление здорово. Кроме того, мне нужно было выполнить элементарный парсинг веб-страниц.

Бизнес-логика довольно проста

Прежде всего, вот ссылка на проект Github: https://github.com/nkhil/stts.

Весь мой код находится в папке src. Фактическая логика очень проста - у меня есть объект (ищите data.json, если вы просматриваете репозиторий github) с кодами состояния и их описаниями в виде пар ключ-значение. У меня также есть массив всех кодов состояния HTTP. Затем нужно просто перебирать массив кодов состояния, и если этот код состояния существует как ключ, я выхожу из описания в консоли.

Для стилизации / форматирования я использую несколько внешних зависимостей, таких как мел и перенос слов.

Заставить его работать из командной строки

После того, как я опубликовал модуль, заставить его работать из терминала было немного сложно, но благодаря этой статье он стал тривиальным - вам нужно добавить символ shebang поверх файла index.js.

#!/usr/bin/env node

и сопоставьте сценарий с командой в package.json

"bin": {
  "stts": "./src/index.js"
}

Публикация пакета npm проста, и вы найдете множество ресурсов для этого.

Веб-сканирование 101

Я ни в коем случае не являюсь экспертом в области парсинга веб-страниц, кто-то на работе (спасибо, Джош!) Предложил Cheerio в качестве предпочтительного пакета.

Я начинаю с массива всех существующих кодов состояния, затем перебираю каждый из них, чтобы выполнить операцию.

Например:

[200, 201, 202, 301, 302, 400].forEach(statusCode => {
  // Do stuff with each status code.
})

Вот мои логические шаги:

  1. Свяжите каждый код статуса с https://httpstatuses.com/ (например, https://httpstatuses.com/200)
  2. Сделайте запрос GET, чтобы вернуть весь HTML с этой страницы
  3. Найдите нужный текст с помощью селекторов Cheerio

Примечание. Вот код парсинга веб-страниц.

Это форма объекта результата:

{
  "100": {
    "headline": "100 Continue",
    "summary": "The initial part of a request has been received and has not yet been rejected by the server. The server intends to send a final response after the request has been fully received and acted upon."
  },
  "101": {
    "headline": "101 Switching Protocols",
    "summary": "The server understands and is willing to comply with the client's request, via the Upgrade header field1, for a change in the application protocol being used on this connection."
  },
  "102": {
    "headline": "102 Processing",
    "summary": "An interim response used to inform the client that the server has accepted the complete request, but has not yet completed it."
  },
  ...
}

Вот и все, как только у меня есть данные, мне больше не нужно удалять их (к счастью, коды состояния HTTP не меняются раз в две недели), и я могу использовать их в качестве справочного ресурса.