Продолжая работу над проектами FCC Backend, чтобы завершить скоростное прохождение Chingu FCC Speedrun Challenge, я перешел к проекту Request Header Microservice API.

Хорошо, я буду честен — я переиспользовал практически все из моего проекта Timestamp Microservice. Почти все базовые настройки одинаковы: настройте приложение Node.js/Express, настройте маршрутизацию, создайте представление индекса в pug. Единственная реальная разница в том, что запрос API должен был предоставить мне некоторую информацию, которую мой браузер знает о моей среде, вместо того, чтобы манипулировать некоторыми временными метками.

Шаг 1 — посмотрите, что находится в заголовках запроса

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

res.send(req.headers);

Шаг 2 — извлечь нужные данные из заголовков запроса

Это позволило мне взглянуть на все, что было доступно мне в заголовках запросов, а затем бим, бац, бум, я просто проанализировал эти биты, и все готово!

Мой последний модуль, который обрабатывает буквально все необходимое для «настоящей работы» над этим проектом, был:

module.exports = {
  parse: function (req, res) {
    let requestData = {
      "ipaddress": req.headers['x-forwarded-for'].split(',')[0] || 
                   req.connection.remoteAddress.split(',')[0],
      "language":  req.headers['accept-language'].split(',')[0],
      "software":  req.headers['user-agent'].split(') ')[0].split(' (')[1]
     }
    res.send(requestData);
    }
}

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

Не позволяйте этому напугать вас, просто распечатайте заголовки запроса, а затем приступайте к работе, разбивая их на значения, необходимые для возвращаемого JSON.

Примечания:

Мой прогресс в Speedrun на данный момент: