#javascript #mongodb #express #mongoose
#javascript #mongodb #экспресс #мангуст
Вопрос:
Мне трудно понять, почему мой обратный вызов оправдывает, но не возвращает значение. data.ItemId регистрируется в консоли, но похоже, что avatar.ItemId не возвращается. Вы не можете вернуть значения вновь созданного документа? Уверен, что я просто делаю это неправильно. Я прочитал это, но я все еще не уверен, куда возвращается обратный вызов или почему данные не возвращаются из вызова 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:
Внутри вашего обратного вызова попробуйте:
let callback = function (err, data) {
if (!err amp;amp; data) return data;
else console.log(err ? err : "Data not defined");
}
Я бы предположил, что вы должны возвращать весь data
объект, а затем делать avatar.itemId
после await
, как вы сейчас делаете.
Комментарии:
1. я смог заставить его работать после того, как добавил await к вызову функции. не уверен, что вы это имели в виду, но спасибо!