我想查找mongodb中是否存在电子邮件,但是当我使用邮递员发送GET request
时,我得到了错误响应。
请求:
{
"email":"myemail@gmail.com"
}
响应:
{
"message": "Cast to ObjectId failed for value \"email\" at path \"_id\" for model \"User\""
}
这是我的users.controller.js
:
router.get('/email', getByEmail); // defined route
...
function getByEmail(req, res, next) {
userService.getByEmail(req.body)
.then(user => user ? res.json(user) : res.sendStatus(404))
.catch(err => next(err));
}
这是users.service.js
:
async function getByEmail({email}) {
const user = await User.findOne({email}).select('-hash');
return user;
}
这对我来说毫无意义,因为在我的其他功能(例如用户登录)中,我同样检查电子邮件是否存在,并且可以正常工作。这是登录名:
控制器:
router.post('/authenticate', authenticate);
...
function authenticate(req, res, next) {
userService.authenticate(req.body)
.then(user => user ? res.json(user) : res.status(400).json({ message: 'Email or password is incorrect' }))
.catch(err => next(err));
}
服务:
async function authenticate({ email, password }) {
const user = await User.findOne({ email });
if (user && bcrypt.compareSync(password, user.hash)) {
const { hash, ...userWithoutHash } = user.toObject();
const token = jwt.sign({ sub: user.id }, config.secret);
return {
...userWithoutHash,
token
};
}
}
编辑:
我发现,当我将请求更改为POST
并且还更改函数以返回true
或false
(如果对象存在或不存在)时,它可以工作,但是我应该怎么做更改它使其适用于GET
请求?