Node.js - Проверка для уточнения c CharSet - PullRequest
1 голос
/ 31 марта 2020

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


const userSchema = mongoose.Schema({
    _id: mongoose.Schema.Types.ObjectId,
    email: { 
        type: String, 
        required: true, 
        unique: true, 
        match: /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/
}


Это просто важная часть, потому что там я утверждаю, что почта должна соответствовать этой указанной c кодировке.
Теперь моя проблема: если я обновлю электронное письмо методом PATCH

router.patch('/user', checkAuth, async (req, res, next) => {
  try {
    const id = req.body._id;

    const update = req.body;

    const options = { new: true };

    const result = await User.findByIdAndUpdate(id, update, options);

    if (!result) {
      throw createError(404, 'User does not exist');
    }

    res.send(result);

  } catch (error) {
    console.log(error.message);

    if (error instanceof mongoose.CastError) {
      return next(createError(400, 'Invalid User Id'));
    }

    next(error);
  }
})

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

Заранее спасибо, Том

1 Ответ

1 голос
/ 31 марта 2020

Если вы запрашиваете сопоставление с шаблоном в HTML, то вы можете подтвердить свой адрес электронной почты, используя этот тег <input>:

<input pattern="/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/" required />

Чек Валидатор JS проверить на уровне API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...