我的数据库mongodb中有两个集合tutors
和users
。我在控制器中有一个signin
功能。在signin
内部,我有tutors
和users
。我应该添加什么条件才能在tutors
和users
集合中搜索用户?
控制器/auth
const User = require('../models/user');
const Tutor = require('../models/tutor');
module.exports.signin = (req, res) => {
const {email, password, remember} = req.body;
//User
User.findOne({email}).exec((err, user) => {
if(err || !user) {
return res.status(400).json({
error: 'User with that email does not exist. Please signup'
});
}
if(!user.authenticate(password)) {
return res.status(400).json({
error: 'Email and password do not match'
});
}
const {_id, name, surname, email} = user;
if (remember) {
const token = jwt.sign({_id: user._id}, process.env.JWT_SECRET, {expiresIn: '7d'});
return res.json({
token,
user: {_id, name, surname, email}
});
} else {
const token = jwt.sign({_id: user._id}, process.env.JWT_SECRET, {expiresIn: '2m'});
return res.json({
token,
user: {_id, name, surname, email}
});
}
});
//tutor
Tutor.findOne({email}).exec((err, tutor) => {
if(err || !tutor) {
return res.status(400).json({
error: 'Tutor with that email does not exist. Please signup'
});
}
if(!tutor.authenticate(password)) {
return res.status(400).json({
error: 'Email and password do not match'
});
}
const {_id, name, surname, email} = tutor;
if (remember) {
const token = jwt.sign({_id: user._id}, process.env.JWT_SECRET, {expiresIn: '7d'});
return res.json({
token,
tutor: {_id, name, surname, email}
});
} else {
const token = jwt.sign({_id: tutor._id}, process.env.JWT_SECRET, {expiresIn: '2m'});
return res.json({
token,
tutor: {_id, name, surname, email}
});
}
});
};
这是设计数据库模型的糟糕方法。相反,创建一个单独的集合,称之为users
,它可以有一个类似userType
的字段,可以是Tutor
或User
用户模型User.js
var userSchema = {
type: String,
enum: ['tutor', 'user'],
default: 'user'
}
并像这样查询:
Tutor.findOne(...) // to query for a tutor
User.findOne(...) // to query for a user