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