Рубрики
Без рубрики

Три полезных экспресс промежуточного программного обеспечения

Я хочу поделиться тремя полезными экспресс-льдами с вами. Они: Morgan, CameLCase и удаление пустых свойств. Теги с экспрессом, узлом, JavaScript.

Когда я создал приложения с Express и Node, я узнал около трех полезных подразгоний:

  1. Морган
  2. CamelCase
  3. Удалить пустые свойства

Из этих трех Морган – это фактическое промежуточное программное обеспечение. Вы можете скачать Морган от NPM напрямую. Два других – это средние годы, которые я создал с Камелчаз-ключей и Опуская пустое соответственно.

Я хочу поделиться тем, что делают эти три людности, и как они делают жизнь легче для меня, когда я создаю приложения.

Morgan4.

Morgan – это регистратор запроса. Он говорит вам несколько вещей, когда ваш сервер получает запрос. Это может регистрировать такие вещи, как:

  • Дата
  • HTTP версия
  • Метод
  • Реферат
  • Удаленный адрес
  • Удаленный пользователь
  • Запросить заголовок
  • Заголовки ответа
  • Время отклика
  • Код состояния
  • URL запроса
  • Пользовательский агент

Morgan поставляется с пятью предопределенными форматами для вас на выбор:

  1. Комбинированный
  2. Общий
  3. короткий
  4. Дев
  5. Крошечный

Я использую только dev формат. А dev Журнал из Моргана выглядит так:

Я использую Морган, чтобы проверить две вещи:

  1. Метод и конечная точка
  2. Коды статуса

Проверка метода и конечной точки

Когда вы пишете BackeND код, вам необходимо убедиться, что вы отправляете запрос с правильным методом и конечной точкой. Если метод или конечная точка неверно, вы не сможете запускать обработчик запроса, вы ожидаете, чтобы вызвать.

Например, если вы хотите вызвать RequestHandler В приведенном ниже коде вам нужно отправить Получить просьба к /Тестирование конечная точка.

app.get("/testing", requestHandler);

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

Когда я отправляю запрос на сервер, я получаю журнал из Моргана. Этот журнал говорит мне метод и конечную точку. Первое значение – это метод. Второе значение является конечной точкой.

Проверка кодов состояния

Поскольку бэкэнс о коммуникация Я хочу убедиться, что отправляю правильный код состояния обратно в интерфейс. Если пользователь пытается войти в систему с неправильным именем пользователя или паролем, я хочу отправить несанкционированную ошибку 401 вместо 500 внутренней ошибки сервера.

Лучшая часть о dev Формат – это показан код состояния с разными цветами. Это облегчает обнаружение кодов статуса.

Код состояния 200+ зеленый:

Код статуса 300+ является Cyan:

Код состояния 400+ желтый:

И код состояния 500+ красный:

CamelCase

Допустим, вы хотите получить имя пользователя из формы. Для этого вам нужен <ФОРМА> в вашем HTML. <ФОРМА> должен содержать с Имя Первое имя Отказ

Получить Первое имя На бэкэнде вам нужно использовать нотацию кронштейна. Это потому, что - это оператор в JavaScript. Это не признано дефисом.

app.get("/endpoint", (req, res) => {
  // Bracket notation to get the value of a property
  const firstName = req.body["first-name"];
});

Мне не нравится использовать нотацию кронштейна. Я предпочитаю использовать нотацию Dot, когда это возможно.

app.get("/endpoint", (req, res) => {
  // Dot notation
  const firstName = req.body.firstName;
});

Я предпочитаю точечную обозначение, потому что я использую его везде. Я привык писать корпус верблюда в JavaScript. Это странно, если я не использую точечную обозначение. Кроме того, я могу разрушать свойство, если я смогу использовать точечную обозначение.

app.get("/endpoint", (req, res) => {
  const { firstName } = req.body;
});

Использовать точечную обозначение, мне нужно убедиться, что Имя Недвижимость в Элемент написан в корпусе верблюда.


Но это чувствует себя странно, потому что мы обычно не везем на верблюдах в HTML! Мы разделяем слова с дефисами!






Мое решение состоит в том, чтобы преобразовать все свойства в корпус CAMEL, прежде чем он бьет мой обработчик запроса. Я делаю это с промежуточным программным обеспечением, которую я сделал, используя Синре Сорхус CamelCase-Keys упаковка.

const camelcaseKeys = require("camelcase-keys");

const camelcase = () => {
  return function(req, res, next) {
    req.body = camelcaseKeys(req.body, { deep: true });
    req.params = camelcaseKeys(req.params);
    req.query = camelcaseKeys(req.query);
    next();
  };
};

Вы можете использовать промежуточное программное обеспечение, как это:

app.use(camelcase());

С камера Вам не нужно беспокоиться о имя , first_name , Первое имя или Имя . Это всегда будет Имя Отказ

Неважно, вы получаете от req.body , req.params или req.Query слишком. Все свойства будут в корпусе верблюда.

Удалить пустые свойства

Давайте представим ситуацию, когда вы ожидаете навыки навыков.

fetch('/endpoint', {
  method: 'post',
  headers: { 'Content-Type': 'application/json' }
  body: JSON.stringify({
    name: 'Zell',
    skills: ['coding', 'designing', 'writing']
  })
}

Если есть один или несколько навыков, вы хотите добавить навыки в базу данных.

app.post("/endpoint", (req, res) => {
  const { skills } = req.body;

  if (skills.length !== 0) {
    // Add skills to database
  }
});

Но у нас есть проблема. Пользователи могут отправить вам вариант запроса:

  1. Не содержит нет навыки имущество
  2. Содержит пустой навыки имущество
  3. Содержит навыки недвижимость по крайней мере на уме

Если пользователь не отправляет вам навыки Собственность, вы не можете написать Skills.Length Отказ Вы получите ошибку, которая написана Не удается прочитать свойство «Длина» undefined Отказ

Чтобы правильно проверить на один или несколько навыков, вам нужно два условия:

  1. Проверьте, есть ли навыки множество
  2. Проверьте, есть ли в массиве хотя бы один элемент
app.post("/endpoint", (req, res) => {
  const { skills } = req.body;

  if (skills && skills.length !== 0) {
    // Add skills to database
  }
});

Есть способ упростить эти проверки. Мое решение состоит в том, чтобы создать промежуточное программное обеспечение с Джон Шлинкерт Опуская пустое упаковка.

опускание Удаляет пустые свойства от объекта.

const object = {
  null: null,
  undefined: undefined,
  emptyString: "",
  emptyArray: [],
  emptyObject: {},
  filled: "yay"
};

console.log(omitEmpty(object));
// {
//   filled: 'yay'
// }

Вот промежуточное программное обеспечение, которое я сделал:

const omitEmpty = require("omitEmpty");

const removeEmptyProperties = () => {
  return function(req, res, next) {
    req.body = omitEmpty(req.body);
    req.params = omitEmpty(req.params);
    req.query = omitEmpty(req.query);
    next();
  };
};

Вы можете использовать RelistemptyProperties Сюда:

app.use(removeEmptyProperties());

Как только вы используете RelistemptyProperties промежуточное ПО, вам не нужно проверять длину навыки Отказ Вы можете быть уверены навыки Содержит один или несколько предметов, если он присутствует.

Так что код становится:

app.post("/endpoint", (req, res) => {
  const { skills } = req.body;

  if (skills) {
    // Add skills to database
  }
});

Гораздо проще!

Спасибо за прочтение. Эта статья была первоначально опубликована на мой блог Отказ Подпишитесь на Моя рассылка Если вы хотите больше статей, чтобы помочь вам стать лучшим разработчиком Frontend.

Оригинал: “https://dev.to/zellwk/three-useful-express-middleware-1di”