簡體   English   中英

toObject 不是貓鼬中的函數錯誤

[英]toObject is not a function error in mongoose

這是 filesPost 控制器文件。 在這里,我從 MongoDB 中獲取所有數據,並將數據推送到那里。 該函數在不登錄控制台userInfo的情況下運行良好,但是當我嘗試將其登錄到控制台時,它給出了userInfo.toObject({getters: true})不是函數的錯誤。 我試過 toJSON() 但我得到了同樣的錯誤。

const { validationResult } = require("express-validator");

const HttpError = require("../models/http-error");
const File = require("../models/file");
const User = require("../models/user");

const getFilesByUserId = async (req, res, next) => {
  const userId = req.params.uid;

  let filePosts;
  try {
    filePosts = await File.find({ creator: userId });
  } catch (err) {
    return next(new HttpError("Fetching failed, please try again.", 500));
  }

  const userInfo = User.findById(userId);

  if (!filePosts || filePosts.length === 0) {
    return next(
      new HttpError("Could not find files for the provided user id.", 404)
    );
  }

  console.log(userInfo.toObject({ getters: true }));
  res.json({
    filePosts: filePosts.map((file) => file.toObject({ getters: true })),
  });
};

在您的異步函數中,即使對User.findById(userId)的調用未完成,您的代碼也會繼續。 您可以使用await語句來確保函數在您的代碼繼續運行之前已經運行。

如果您更改const userInfo = User.findById(userId);您的代碼應該可以工作

const userInfo = await User.findById(userId);

有關更多信息,這里是 async/await 文檔: https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

只需要添加等待。

const userInfo = await User.findById(userId);

暫無
暫無

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

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