作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建一个用户身份验证和注册 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/
我是一名优秀的程序员,十分优秀!