首页 > 解决方案 > 用户登录时更改用户密码,但我收到错误“位置 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

标签: node.jsmongodbexpress

解决方案


请按如下方式更改代码:

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 并将差异与您的邮递员请求进行比较


推荐阅读