Javascript 使用express.js处理重复项

Javascript 使用express.js处理重复项,javascript,node.js,postgresql,express,post,Javascript,Node.js,Postgresql,Express,Post,所以我第一次尝试使用express创建一个登录名,并使用Postgres进行响应。我的用户可以被添加到数据库中,因此我开始处理重复项。我正在使用FindUserByMail功能查找我的电子邮件,然后在我的路线中,在发布电子邮件之前调用该功能。我希望你们能帮我,我已经做了一个星期了 这是my queries.js,其中我: const findUserByEmail = email => { return pool.query("SELECT * FROM users WHERE ema

所以我第一次尝试使用express创建一个登录名,并使用Postgres进行响应。我的用户可以被添加到数据库中,因此我开始处理重复项。我正在使用FindUserByMail功能查找我的电子邮件,然后在我的路线中,在发布电子邮件之前调用该功能。我希望你们能帮我,我已经做了一个星期了

这是my queries.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}`);
        }
      );
    });
  });
};



这是我的index.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}.`);
});

/…其他连接代码
//路线
app.get(“/users”,querys.getUsers);
app.get(“/user/:id”,querys.getUserById);
app.post(“/signup/user)”,(请求、回复、下一步)=>{
console.log(req.body.email,“------------1”);
询问
.findUserByEmail(请求正文.email)
。然后(用户=>{
console.log(user.rows.length);
if(user.rows.length<0){
res.status(400)。发送(“此电子邮件已在使用”);
}否则{
console.log(“你好”);
querys.createUser;
}
})
.catch(错误=>{
控制台日志(err);
res.status(500)。发送(“出错”);
});
});
app.put(“/user/:id”,querys.updateUser);
app.delete(“/user/:id”,querys.deleteUser);
应用程序侦听(端口,()=>{
log(`App running on port${port}.`);
});
并没有给我一个错误,但当我提交一个新用户时,会一直发布,不会改变

我的发帖请求直到现在还没有使用FindUserByMail


感谢您的帮助。

您不能保证
findUsersByEmail
会找到任何东西,即使之前有一个电话,创建了一个用户。原因是创建用户的查询可能尚未返回

您需要数据库约束来处理此问题


在email字段上设置一个唯一的约束并正确处理重复的异常。

您忘记在
findUserByEmail中返回结果
我尝试了
const findUserByEmail=(email,response)=>{pool.query(“选择*来自用户,其中email=$1,,[email],(错误,结果)=>{if(错误){throw error;}else{response.status(200).json(results.rows);返回结果}}}};}
尽管如此,给我未定义的我不明白,FindUserByEmail应该会找到我插入的电子邮件。如果我保持函数的原样,它会按照我解释的做,如果我放入另一个逻辑,即If/else,返回未定义。服务器从未响应?在这种情况下,插入一个
res.status(…).send(…)
查询之后。createUser
。谢谢,这很有效,我还必须通过查看请求向createUser添加一些参数