Обрабатывать дубликаты с помощью express. js - PullRequest
0 голосов
/ 16 марта 2020

Итак, я впервые пытаюсь создать логин с помощью express и реагировать с помощью Postgres. Мой пользователь может быть добавлен в базу данных, поэтому я перешел к обработке дубликатов. Я использую функцию findUserByEmail, чтобы найти свою электронную почту, а затем в своих маршрутах вызываю эту функцию перед отправкой электронной почты. Я надеюсь, что вы, ребята, можете мне помочь, я уже 1 неделю с этим.

Это мои запросы. js где я:

const findUserByEmail = email => {
  return pool.query("SELECT * FROM users WHERE email = $1", [email]);
};

const createUser = (request, response) => {
  const date_created = new Date();
  const { username, email, password } = request.body;

  bcrypt.genSalt(saltRounds, function(err, salt) {
    bcrypt.hash(password, salt, function(err, hash) {
      pool.query(
        `INSERT INTO users (username, email, password, date_created) VALUES ($1, $2, $3, $4 )`,
        [username, email, hash, date_created],
        (error, results) => {
          // console.log("---------->", email);
          if (error) {
            throw error;
          }
          response.status(201).send(`User added with ID: ${results.insertId}`);
        }
      );
    });
  });
};



и это мой индекс. js:

// ...Other connection code

//Routes

app.get("/users", queries.getUsers);
app.get("/user/:id", queries.getUserById);

app.post("/signup/user", (req, res, next) => {
  console.log(req.body.email, "----------1");
  queries
    .findUserByEmail(req.body.email)
    .then(user => {
      console.log(user.rows.length);
      if (user.rows.length < 0) {
        res.status(400).send("this email is already in use");
      } else {
        console.log("Hello");
        queries.createUser;
      }
    })
    .catch(err => {
      console.log(err);
      res.status(500).send("Something went wrong");
    });
});

app.put("/user/:id", queries.updateUser);
app.delete("/user/:id", queries.deleteUser);

app.listen(port, () => {
  console.log(`App running on port ${port}.`);
});

Не выдает ошибку, но, когда я отправляю нового пользователя, продолжает публиковать сообщения без изменений.

Мой запрос на публикацию работал до сих пор без использования findUserByEmail.

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 17 марта 2020

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

Для решения этой проблемы необходимы ограничения базы данных.

Установите уникальное ограничение для поля электронной почты и правильно обрабатывайте дублирующиеся исключения.

...