我有一个路由'/login',它有控制器来验证用户是否有效。 现在,我只是验证从路由参数输入的密码是否等于我存储在我的数据库中的密码。
我几乎没有什么办法来完成我的工作。
在validatePassword方法中,我想在向客户机发送数据之前删除不需要的字段,如password。 因此,我正在将mongoose对象转换为javascript对象,并执行删除操作。
问题:每当我转换为JS对象时,都会遇到“to object()not defined”错误。 正在附加上述控制器方法的代码段。 如有改动,请提出建议!
let findUser = (req, res) => {
return new Promise((resolve, reject) => {
if (req.body.email) {
userModel.find({ email: req.body.email }, (error, userDetails) => {
if (error) {
let response = apiResponse.generate(
true,
"Unable to reach out to server",
500,
null
);
reject(response);
} else if (checkLib.isEmpty(userDetails)) {
let response = apiResponse.generate(
true,
"Unable to reach out to server",
500,
null
);
reject(response);
} else {
resolve(userDetails);
}
});
} else {
let response = apiResponse.generate(
true,
"Please provide emailID and password",
404,
null
);
reject(response);
}
});
};
此方法检索我链接在validatePassword()中的userDetails
let validatePassword = (retrievedUserDetails) => {
return new Promise((resolve, reject) => {
console.log("passw:" + retrievedUserDetails);
if (req.body.password) {
console.log(retrievedUserDetails.password);
console.log(req.body.password);
if (retrievedUserDetails[0].password != req.body.password) {
let response = apiResponse.generate(
true,
"Password or email is invalid",
404,
null
);
reject(response);
} else {
let retrievedUserDetailsObj = retrievedUserDetails.toObject();
delete retrievedUserDetailsObj.password;
let response = apiResponse.generate(
false,
"Signed in successfully",
200,
retrievedUserDetails
);
resolve(response);
}
} else {
let response = apiResponse.generate(
true,
"Please provide password",
404,
null
);
reject(response);
}
});
}
链接:
findUser(req, res)
.then(validatePassword)
.then((resolve) => {
let response = apiResponse.generate(
false,
"user is signed in successfully",
200,
resolve
);
res.send(response);
})
.catch((err) => {
console.log(err);
res.send(err);
});
};
似乎您使用的是模型的。find方法,而不是。findone方法。 第一个将始终返回与查询匹配的文档数组,而第二个将返回匹配的第一个对象。 您基本上要做的是[{something}].toObject()
,这实际上是未定义的。