правильный способ использования промежуточного программного обеспечения в экспрессе - PullRequest
0 голосов
/ 23 марта 2019

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

const isUnique = (req, res, next) => {
   User.findOne({
      where:{
        email: req.body.email
      }
   })
   .then(getUser => {
        if(getUser){
          next("/userAlreadyExist") // router
          // or can i render to to html? i am using ejs
        } else {
          next()
        }
   })
   .catch(next())
}


app.post('/register', isUnique ,(req, res) => {
    res.send(`thank you for register`)
}

Я хочу убедиться, что электронная почта уже существует или нет, поэтому я хочу сначала передать ее на middleware и получить страницу для isUnique, если электронная почта уже используется, я хочу перенаправьте его на следующий маршрутизатор с именем '/emailExist', и, если он пройдет успешно, я хочу перенаправить его на маршрутизатор /success Кто-нибудь может мне помочь, если этот код неправильный или нет? просто хочу убедиться: D

1 Ответ

2 голосов
/ 23 марта 2019

У вас есть много вариантов, вот пара.

  1. Вы можете перенаправить пользователей на определенные страницы в зависимости от того, существует электронная почта или нет. В ваших маршрутах /emailAlreadyExists и /registerSuccess вы можете отображать любые шаблоны или возвращать некоторые данные.
const isUnique = (req, res, next) => {
   User.findOne({
      where:{
        email: req.body.email
      }
   })
   .then(getUser => {
        if (getUser) {
            res.redirect('/emailAlreadyExists');
        } else {
            res.redirect('/registerSuccess'); // or just call next()
        }
   })
   .catch(next("DB error"));
}
  1. Передайте результаты запроса базы данных и позвольте вашему окончательному промежуточному программному обеспечению обработать его:
const isUnique = (req, res, next) => {
   User.findOne({
      where:{
        email: req.body.email
      }
   })
   .then(getUser => {
        req.user = getUser;
        next();
   })
   .catch(next());
}

app.post('/register', isUnique ,(req, res) => {
    if (req.user) {
        res.send('User already exists');
    } else {
        res.send(`thank you for register`);
    }
}
  1. Вы также можете создать связующее ПО для обработки ошибок :
const isUnique = (req, res, next) => {
   User.findOne({
      where:{
        email: req.body.email
      }
   })
   .then(getUser => {
        if(getUser){
          next("Error: user already exists"); // or some other error message/object
        } else {
          next(); // continue to next middleware
        }
   })
   .catch(next("DB error")); // handle errors throw from DB read
}


app.post('/register', isUnique ,(req, res) => {
    res.send(`thank you for register`)
}

/*
    If you call "next" with an argument, Express will skip 
    straight to this error handler route with the argument 
    passed as the "err" parameter
*/

app.use((err, req, res, next) => {
    console.error(err.stack);
    res.status(500).send(`An error occurred: ${err}`);
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...