gpt4 book ai didi

node.js - 使用expressJS检查数据库中的用户名和电子邮件是否

转载 作者:太空宇宙 更新时间:2023-11-03 22:44:16 24 4
gpt4 key购买 nike

我正在尝试检查数据库中的电子邮件和用户名是否已存在。由于我使用 mongoose 和express.js,我只检查数据库中的用户名是否已存在,但我需要检查电子邮件和用户名,并为每个用户返回一条合适的错误消息。但是,我不知道如何检查它们。以下是我迄今为止编写的一些代码:

User.findOne({
'username': username
},
function(err, user) {

if (err) {

console.log('Signup error');
return done(err);
}

//if user found.
if (user) {

console.log('Username already exists, username: ' + username);
var err = new Error();
err.status = 310;
return done(err);

}

最佳答案

首先,您可能希望将其添加到您的架构中,以确保所有电子邮件均为小写,因此比较有意义:

email: { type: String, set: toLower } 

下到哪里:

function toLower (str) {
return str.toLowerCase();
}

然后要在 MongoDB 中查找与用户名或电子邮件匹配的文档,您可以使用 MongoDB $or operator

所以查询将是这样的:

User.find($or:[{username: username}, {email: email}]);

由于您使用的是 Mongoose ,我们可以使用 pre middleware ,在保存之前验证文档

所以你的代码可能是这样的:

UserSchema.pre('save', function(next){
var user = this ;
User.find($or:[{username: user.username}, {email: user.email}],
function(err, users){
if(err) {
return next(err);
} else if(users) {
if (_.find(users , {email: user.email})){
user.invalidate('email', 'email is already registered');
next( new Error("email is already registered"));
}
else if (_.find(users , {username: user.username})){
user.invalidate('username', 'username is already taken');
next( new Error("username is already taken"));
}
}
else{
next();
}
})
})

这可能无法涵盖所有​​情况,并使用 lodash为了简单和它的精彩。

关于node.js - 使用expressJS检查数据库中的用户名和电子邮件是否,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28146601/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com