提问者:小点点

toObject不是转换mongoose对象时的函数错误


我有一个路由'/login',它有控制器来验证用户是否有效。 现在,我只是验证从路由参数输入的密码是否等于我存储在我的数据库中的密码。

我几乎没有什么办法来完成我的工作。

  1. findUser()-验证用户输入的必填字段是否正确,并在找到数据时解析Mongoose对象
  2. validatePassword()-它链接到findUser()并将mongoose对象转换为JS对象

在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);
    });
};

共1个答案

匿名用户

似乎您使用的是模型的。find方法,而不是。findone方法。 第一个将始终返回与查询匹配的文档数组,而第二个将返回匹配的第一个对象。 您基本上要做的是[{something}].toObject(),这实际上是未定义的。