gpt4 book ai didi

javascript - 查询时并不总是提供参数

转载 作者:行者123 更新时间:2023-12-03 04:07:55 26 4
gpt4 key购买 nike

我正在创建一个用户身份验证和注册 API,并在 register 端点中检查具有所提供的用户名或电子邮件地址的用户是否已存在。棘手的是用户名不是必需的,因此有时是未定义的。如果存在任何具有 undefined 用户名的现有用户,并且有人尝试在不提供用户名的情况下注册(也称为 undefined 作为用户名),它会找到之前的 undefined 用户,不会让注册继续。

如何查询:

Find one user with the email address [email address] OR with the username [username] if the username is not undefined

这是我的路线(使用 express ):

exports.register = (req, res, next) => {    
const email = req.body.email.toLowerCase();
const username = (req.body.username) ? req.body.username.toLowerCase() : undefined;
const password = req.body.password;
const name = req.body.name;

// Return error if no email provided
if (!email) {
return res.status(422).send({ error: 'You must enter an email address.' });
}

if (!password) {
return res.status(422).send({ error: 'You must enter a password.' });
}

const queryUser = User.findOne({ $or: [{ email }, { username }] }).exec();

queryUser.then((existingUser) => {
if (existingUser) {
const field = (existingUser.email === req.body.email) ? 'email address' : 'username';
return res.status(422).send({ error: `A user with that ${field} already exists.` });
}

const user = new User({
email, password, username, name,
});

user.save().then((newUser) => {
const userInfo = setUserInfo(newUser);
res.status(201).json({
token: `JWT${generateToken(userInfo)}`,
user: userInfo,
});
}).catch(userErr => next(userErr));
}).catch(err => next(err));

return true;
};

我想如果未定义用户名,我可以进行不同的查询,如下所示:

let queryUser;
if (username) {
queryUser = User.findOne({ $or: [{ email }, { username: { $ne: undefined, username } }] }).exec();
} else {
queryUser = User.findOne({ email }).exec();
}

但我宁愿更多地了解如何使用 Mongo 处理此类事情。

最佳答案

或者您可以有条件地构建查询:

var query = { $or: [ { email } ] };

if ( req.body.hasOwnProperty('username') ) {
query.$or.push({ "username": { "$ne": req.body.username.toLowerCase() } }
}

queryUser = User.findOne(query).exec();

这些只是 JavaScript 对象,可以像其他任何对象一样进行操作。

这就是为什么 MongoDB 查询语言基于标准数据结构格式

关于javascript - 查询时并不总是提供参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44467383/

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