簡體   English   中英

toObject is not a function error while converting mongoose object

[英]toObject is not a function error while converting mongoose object

我有一個路由 '/login',其中有 controller 來驗證用戶是否有效。 現在,我只是驗證從路由參數輸入的密碼是否等於我存儲在我的數據庫中的密碼。

我幾乎沒有辦法為我完成工作。

  1. findUser() - 驗證用戶是否輸入必填字段並在找到數據時解析 Mongoose object
  2. ValidatePassword() - 它鏈接到 findUser() 並將 mongoose object 轉換為 JS object

在 validatePassword 方法中,我想在向客戶端發送數據之前刪除密碼等不需要的字段。 結果,我將 mongoose object 轉換為 javascript object 並執行刪除操作。

問題:每當我轉換為 JS object 時,我都會收到“toObject() not defined”錯誤。 附上上述 controller 方法的片段。 請提出任何更改!

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

看來您使用的是 model 的 .find 方法,而不是 .findOne 方法。 第一個將始終返回與查詢匹配的文檔數組,而第二個將返回匹配的第一個 object。 你基本上想要做的是[{something}].toObject()這確實是未定義的。

使用 findOne,而不是查找。 因為.toObject 適用於單個 object,而不適用於數組。

如果你想在數組上運行 run.toObject,只需循環數組並在循環中的數組的單個 object 上運行 run.toObject

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM