node.js - 用户登录时更改用户密码,但我收到错误“位置 0 处 JSON 中的意外令牌 o”
问题描述
这是我的更改密码功能。当使用 Postman 调用此函数时,它可以工作,但是当我尝试从应用程序中点击它时,它会给出错误。
async function changePassword(req,res) {
try {
email = req.user.email;
let user = await userModel.findOne({email: email});
console.log(req.body.password+"dsddsd");
console.log(req.body.oldPassword);
if(!bcrypt.compareSync(req.body.oldPassword, user.password)) {
res.status(400).json({message : "Invalid Old Password"});
}
else {
req.body.password = bcrypt.hashSync(req.body.password, 10);
try {
await userModel.updateOne({email : email
},{
$set : {
password : req.body.password
}
});
res.status(200).json({message : "Password Changed SuccessFully"});
} catch (error) {
res.status(500).json({message : "Something Went Wrong"});
}
}
} catch (error) {
res.status(500).json({message : "Error"});
}
};
我收到错误消息:
JSON 中位置 0 的意外标记 o
解决方案
请按如下方式更改代码:
async function changePassword(req,res) {
try {
email = req.user && req.user.email;
//Added a extra check to make sure that payload is received as required.
if(!email || !req.body.password || !req.body.oldPassword) {
return res.status(400).json({ message : "Bad Request" });
}
let user = await userModel.findOne({email: email});
console.log(req.body.password+"dsddsd");
console.log(req.body.oldPassword);
if(!bcrypt.compareSync(req.body.oldPassword, user.password)) {
res.status(400).json({message : "Invalid Old Password"});
}
else {
req.body.password = bcrypt.hashSync(req.body.password, 10);
try {
await userModel.updateOne({email : email
},{
$set : {
password : req.body.password
}
});
res.status(200).json({message : "Password Changed SuccessFully"});
} catch (error) {
res.status(500).json({message : "Something Went Wrong"});
}
}
} catch (error) {
res.status(500).json({message : "Error"});
}
};
正如您所说,该请求来自邮递员,那么有两个可能的原因:1 Content-Type: application/json
.从应用程序发送时未在请求中设置。2. 请求中没有传递所需的有效负载。
请检查 chrome 浏览器中的网络选项卡并检查传递的请求标头和有效负载以确认。此外,您可以从浏览器网络选项卡中将请求复制为 curl 并将差异与您的邮递员请求进行比较
推荐阅读
- c++ - 指向 C++ 中指针向量的指针
- javascript - javascript函数在提交时没有被调用
- azure - 使用 Arm 模板创建资源组和部署资源并从 Visual Studio 部署
- prolog - 应该写入什么值才能正确运行代码?
- c# - DataGridView 不保存对单元格的编程更改
- django - Django 看不到静态文件图像
- java - 如何在并行执行中运行 X 次相同的测试?
- python - 如何隐式定义空列表的参数?
- xamarin.forms - 从 MasterPage 导航不显示返回按钮
- scala - scala:如何通过编译时宏的复杂多态性获取类名?