MERNQL: проверка в модели или резольвере? - PullRequest
0 голосов
/ 30 октября 2019

Здравствуйте, милые разработчики :)

tl; dr: Лучше ли проверять, существует ли документ базы данных с пользовательским валидатором mongoose ИЛИ в распознавателе graphQL ИЛИ это чисто личное предпочтение? ?

Контекст / Подробности: Я работаю над приложением MERNQL (Mongo, Express, React, Node, GrahQL), где пользователи могут создавать учетные записи с адресом электронной почты и в настоящее время прорабатывают мой путь черезпроверка на стороне сервера.

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

// inside registration mutation 
const user = await User.findOne({ email: email });

  if (user) {
    throw new Error('This user already exists');
  }

Просматривая документацию и примеры mongoose, янашел другой пример MERNQL, который выполнял эту проверку в пользовательском валидаторе на их модели mongoose следующим образом:

// Inside user schema file 
const userSchema = new mongoose.Schema({
   email: {
     type: String,
     validate: {
        validator: async email => await User.where({ email }).countDocuments() === 0,
        message: ({ value }) => `Email ${value} has already been taken.` // TODO: Harden against injection attacks
      }
    },
   ...

Лично я склонен пойти с первым методом и проверить эти вещи в моем преобразователе. Тем не менее, я подумал, что кто-то, возможно, сталкивался с этим раньше или хочет поделиться своим пониманием.

Спасибо всем!

☜ (˚ ▽ ˚) ☞

...