Как я могу добавить функцию, которая проверяет, повторяется ли электронная почта или нет, а затем регистрирует человека? - PullRequest
0 голосов
/ 04 мая 2020

Я использую Node.js, express. js, пн goose и мопса. Я пытаюсь создать систему регистрации / регистрации / входа. Имя и адрес электронной почты хранятся в базе данных mon goose со схемой, указанной для имени, адреса электронной почты и даты. Имя и адрес электронной почты приходят со страницы мопса, которая отправляет запрос на публикацию. Позже я добавлю другие регистрационные данные в код, но я не могу придумать, как реализовать проверку электронной почты.

Это мой /routes/index.js

const express = require('express');
const {
  check,
  validationResult
} = require('express-validator');
const router = express.Router();
//Mongoose

const mongoose = require('mongoose');


var registration = require('../models/registrations') //Important

//Routes

//------------------------------------------------------------------------------------REGISTER/SIGN UP
router.get('/', (req, res) => {
  res.render('./home.pug')
})

router.get('/register', (req, res) => {
  res.render('register', {
    title: 'Register'
  });
});

router.post('/register', [
  check('name')
  .isLength({
    min: 5
  })
  .withMessage('Please enter a name'),
  check('email')
  .isLength({
    min: 14
  })
  .withMessage('Please enter an email'),
], (req, res) => {
  const errors = validationResult(req);



  if (errors.isEmpty()) {

    const regis = new registration(req.body);
    regis.save()
      .then(() => {
        res.send('Thank you for your registration!');
      })
      .catch((err) => {
        console.log(err);
        res.send('Sorry! Something went wrong.');
      })
  } else {
    res.status(422).render('register', {
      title: 'Registration form',
      errors: errors.array(),
      data: req.body,
    });
  }
  console.log(req.body)
})
//Register-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x

//-------------------------------------------------------------------------------------------LOGIN
router.get('/login', (req, res) => {
  res.render('login', {
    title: 'Login'
  });
});

//Login-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x




router.get('/about', (req, res) => {
  res.render('about', {
    title: 'About'
  });
});




module.exports = router;

Я пытался использовать это:

var emailcheck = registration.findOne({email: req.body.email});

if (emailcheck){
  //Give error
  }else{
  //Run this
  }

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

1 Ответ

1 голос
/ 04 мая 2020

Кажется, что функция registration.findOne возвращает Promise, и вы не обрабатываете это должным образом. Попробуйте await это

var emailcheck = await registration.findOne({email: req.body.email});

Или сделайте это в манере закрытия

registration.findOne({email: req.body.email}).then(emailcheck => {
  if (emailcheck){
   //Give error
  }else{
   //Run this
  }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...