app.post('/register', async function(req, res) {
console.log(req.body.email)
console.log(req.body.username)
console.log(req.body.password)
await userModel.findOne({ username: req.body.username }).then(
(user)=>{
if(user != null){
res.send('exists');
return;
}
}).catch((error) => { console.log(error) });
await userModel.findOne({ email: req.body.email }).then(
(user)=>{
if(user != null){
res.send('exists');
return;
}
}).catch((error) => { console.log(error) });
const userInstance = new userModel(
{
username: req.body.username,
password : req.body.password,
email: req.body.email,
imagelink: "/images/blank",
links: [],
plan: 0
});
userInstance.save().then((savedUser) => {
if(savedUser){ /*console.dir(savedUser, {depth:null});*/ res.send('success'); }
}).catch((error) => {
console.log(error);
//res.send(400, "Bad Request");
});
});
字符串
我有这个代码上面创建和保存用户到数据库,然而,当一个用户实际上exists
,它应该return
后res.send()
,但它仍然保存示例到数据库,所以我得到同一个电子邮件的多个示例/用户名组合。如果一个用户存在,我如何返回整个函数,这样我就不会在DB中多次使用相同的电子邮件。return
我似乎没有做我想做的事。
我也得到了这个错误的行,它有res.send("success")
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
型
1条答案
按热度按时间kgsdhlau1#
最简单的方法是将
unique
约束添加到schema中的username
和email
属性。然后,当您尝试使用已存在的username
或email
创建新用户时,Mongoose将执行验证。您的schema看起来像这样:字符串
然后在你的路由处理程序中,尝试创建一个新用户,如果一个用户已经存在,mongoose会抛出一个错误,就像这样:
型
备注:
err.code === 11000
是mongoose抛出的重复键错误,如果来自req.body
的username
或email
已经存在于你的集合中。密码永远不应该以纯文本存储,你应该实现一个预保存钩子并对你的密码进行散列,但这是另一个问题。