mongoDB猫鼬-回调

时间:2020-09-17 21:40:07

标签: javascript mongodb express mongoose

我很难理解为什么我的回调会执行但不返回值。 data.itemId是控制台记录的,但似乎没有返回avatar.itemId。您是否无法返回新创建的文档的值?可以肯定的是我做错了。我已经读过this,但是我仍然不确定回调返回到哪里或为什么saveAvatarImage调用没有返回数据。

const Image = require("../model/Image");

const saveAvatarImage = async (uploadImage, id) => {
  const fs = require("fs");
  //Set image data
  let options = { upsert: true, new: true, omitUndefined: true };
  let update = {
    timestamp: Date.now(),
    img: {
      data: fs.readFileSync(uploadImage.filepath),
      contentType: uploadImage.mimetype,
    },
  };
  let filter = { itemId: id };
  let callback = function (err, data) {
    if (err) console.log(err);
    console.log(data.itemId);
    return data.itemId;
  };
  //Create image in db
  let avatar = await Image.findOneAndUpdate(filter, update, options, callback);
  return avatar.itemId;
};

module.exports = { saveAvatarImage };

这有效

busboy.on("finish", async function () {
    //check for upload
    if (isEmptyObj(uploadImage))
      return res.status(400).json({ error: "Something went wrong." });
    //if image is for profile
    if (formValues.type === "avatar") {
      //////save image to database
      // saveAvatarImage(uploadImage, id);
      //Set image data
      let options = { upsert: true, new: true, omitUndefined: true };
      let update = {
        timestamp: Date.now(),
        img: {
          data: fs.readFileSync(uploadImage.filepath),
          contentType: uploadImage.mimetype,
        },
      };
      let filter = { itemId: req.user._id };
      //Create image in db
      const avatar = await Image.findOneAndUpdate(
        filter,
        update,
        options,
        function (err, data) {
          if (err) console.log(err);
          console.log(data);
        }
      );
      return res.json(avatar);
    }
  });

我想这样做。 (已解决)

busboy.on("finish", async function () {
    //check for upload
    if (isEmptyObj(uploadImage))
      return res.status(400).json({ error: "Something went wrong." });
    //if image is for profile
    if (formValues.type === "avatar") {
      //////save image to database
      let avatar = await saveAvatarImage(uploadImage, req.user._id);
      
      return res.json(avatar);
    }
  });

1 个答案:

答案 0 :(得分:0)

在回调中,尝试:

let callback = function (err, data) {
    if (!err && data) return data;
    
    else console.log(err ? err : "Data not defined");
  }

我假定您应该像现在一样返回整个data对象,然后在avatar.itemId之后执行await