[英]Handle duplicates with express.js
所以我第一次尝试使用 express 创建登录并使用 Postgres 做出反应。 我的用户可以添加到数据库中,所以我开始处理重复项。 我正在使用 findUserByEmail 函数来查找我的电子邮件,然后在我的路由中,在发布电子邮件之前调用该函数。 我希望你们能帮助我,我已经用了 1 周了。
这是我的querys.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}.`);
});
没有给我一个错误,但是当我提交一个新用户时,会永远发布并且不会改变。
我的帖子请求直到现在都没有使用 findUserByEmail。
谢谢你的帮助。
你不能保证findUsersByEmail
会找到任何东西,即使之前有一个调用,创建一个用户。 原因是创建用户的查询可能尚未返回。
您需要数据库约束来处理这个问题。
对电子邮件字段设置唯一约束并正确处理重复异常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.