Что-то не так с If ... else - PullRequest
0 голосов
/ 28 мая 2020

У меня есть это user.model

// user.model.ts

interface User {
  name: string
  email: string
  password: string
  is_active: boolean
}

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

    // If email is taken and is_active is true
    if (found && found.is_active) {
      return next(Boom.badRequest('Email is taken'))
    } else if (found && !found.is_active) {
      // If email is taken and is_active is false, ask to signin
      return next(Boom.unauthorized('Please signin to activate'))
    } else {
      const created = await service.create(data)
      res.send('OK')
    }

Но проблема в том, когда я попробовал с адресом электронной почты (some@one.com), который уже зарегистрирован и активен , он показывает Email is taken, что является правильным. И затем, когда я попытался с другим адресом электронной почты (any@one.com), который зарегистрирован, но не активен , он попытался вставить данные и сломал сервер, потому что email столбец unique - это база данных (Postgres).

Я попробовал еще раз, но на этот раз (any@one.com) первым и (some@one.com) вторым. Он снова сломался при втором условии.

Думаю, проблема в том, что он работает только для одного условия.

Я также пробовал с switch...case, тоже не работает.

    switch (true) {
      case found && found.is_active:
        // If email is taken and is_active is true
        return next(Boom.badRequest('Email is taken'))
      case found && !found.is_active:
        // If email is taken and is_active is false, ask to signin
        return next(Boom.unauthorized('Please signin to activate'))
      default: {
        const created = await service.create(data)
        res.send('OK')
      }
    }

Помогите, пожалуйста, как это исправить?

1 Ответ

0 голосов
/ 28 мая 2020

Почему вы так используете свои if утверждения?

if (found) {
  if (found.is_active) {
    // already in use by active user
    return next(Boom.badRequest('Email is taken'))
  } else {
   // in use, but inactive
   return next(Boom.unauthorized('Please signin to activate'))
  }
else {
// not found, must create
  const created = await service.create(data)
  res.send('OK')
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...