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

Как выполнить пользовательскую проверку в вашем приложении Express.js (часть-2)

В предыдущем посте я показал, как начать работу с входной проверкой в приложении Express.js. Я использовал модуль Express-Validator и обсудил свои важные функции с реализацией. Если вы не проверили это, пожалуйста, прочитайте первый пост здесь. Так что теперь давайте начнем.

Автор оригинала: Shailesh Shekhawat.

В Предыдущий пост Я показал, как начать с проверки ввода в приложении Express.js. Я использовал Экспресс-валидатор Модуль и обсудил свои важные особенности с реализацией.

Если вы не проверили это, пожалуйста, прочитайте первый пост здесь Отказ

Так что теперь давайте начнем. В части 2 этого учебника вы узнаете, как выполнить пользовательские проверки в приложении Express.js.

Что вы можете достичь с пользовательской проверкой

  • Его можно использовать для проверки существования объекта в вашей базе данных.
  • Также проверить, существует ли определенное значение в массиве, объекте, строке и т. Д.
  • Если вы хотите изменить сам формат данных.

И многое другое…

Экспресс-валидатор Библиотека предоставляет Пользовательские Метод, который вы можете использовать, чтобы сделать всевозможные пользовательские проверки

Реализация пользовательского валидатора использует метод цепи .custom () Отказ Это принимает функцию валидатора.

Пользовательские валидаторы возвращают обещания, чтобы показать подтверждение асинхронизации или бросить Любое значение/отклонить обещание Используйте пользовательское сообщение об ошибке Отказ

Теперь я покажу вам примеры вышеупомянутого пользовательского валидации.

Проверьте, существует ли предприятие в вашей базе данных

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

Например, если кто-то просит обновить свое имя, вы бы использовали его для базового Поставить Запрос /API/пользователи/: usid Отказ

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

param('userId')
.exists()
.isMongoId()
.custom(val => UserSchema.isValidUser(val))

IsValidUser () это статическая функция, которая сделает async Call в базу данных и находить, если пользователь существует или нет.

Давайте напишем статическую функцию в Mongoose Схема :

UserSchema.statics = {
   isValid(id) {
      return this.findById(id)
             .then(result => {
                if (!result) throw new Error('User not found')
      })
   },
}

Как мы не можем доверять UserID Отправлено клиентом, основанным только на его формате, нам нужно убедиться, что это реальная учетная запись.

Проверить против определенных значений в массиве или объекте

Например, если вы хотите применить правило на Имя пользователя что он должен иметь характер @ Отказ

Так что в вашем Пост Запрос создания пользователей или при обновлении, вы можете сделать что-то вроде этого:

body('username', 'Invalid Username')
.exists()
.isString().isLowercase()
.custom(val => {   
   
   if (val.indexOf('@') !== -1) return true
    
   return false
}),

Как видите, мы можем сделать все эти проверки, включая Async в самом промежуточной программе, а не делать их в контроллере

Изменить входной формат данных

У библиотеки есть Санитазация Функция, где выполняется пользовательская сазинация, используя Customersanitizer () Отказ

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

Например, у нас есть база данных доктора. Кто-то хочет получить только врачи, которые являются кардиологи и психиатра.

Мы сохранили обе эти специализации как Тип в нашей базе данных.

Простой Получить Запрос будет выглядеть так:

GET /api/doctors?type=cardiologists,psychiatrist

Сейчас в Монгодб Мы можем использовать $ в Оператор для поиска нескольких значений свойства.

Базовая база данных может быть похоже:

Doctors.find({
   type: {
       
     $in: ['cardiologists', 'psychiatrist']
       
   }
})

Это даст вам всех кардиологов и психиатров.

От Получить запрос:

req.query = {

  type: "cardiologists,psychiatrist"
  
}

Как вы можете видеть в req.chery Вы получите недвижимость Тип Чья тип строка Отказ

С помощью .Customanitizer () Мы можем преобразовать строку в массив строк.

На уровне проверки:

const commaToArray  = (value = '') => value.split(',')

sanitizeQuery('type').customSanitizer(commaToArray),

Теперь мы можем напрямую кормить его в запрос баз данных к $ в оператор.

Что, если я хочу применить некоторые правила на все элементы в массиве или ключах в объектах?

через гипю

Тело:

{
  items:[
    {_id: 'someObjectId', number: '200'},
    ...
  ]
}

Подстановочные знаки

Подстановочный знак – одна из великолепных особенностей этого модуля. Это позволяет использовать на массиве элементов или клавиш объектов и подтвердить каждый элемент или его свойства.

* Персонаж также известен как подстановочный знак.

Представьте, что я хочу подтвердить все _id, номер предметов.

check('items.*._id')
.exists()
.isMongoId()
.custom(val => ItemSchema.isValid(val)), //similar to isValidUser() 
sanitize('items.*.number').toInt()

Там у вас есть – введение к проверке ввода, используя модуль Express-Validator

Если вы столкнулись с любыми проблемами, не стесняйтесь получить коснуться или комментировать ниже. Я был бы рад помочь:)

Не стесняйтесь хлопать, если вы считаете это стоящим чтением!

Следуйте за Шайлем Шехаватом, чтобы получить уведомление всякий раз, когда я публикую новый пост.

Первоначально опубликовано 101node.io 22 сентября 2018 года.