如何将cloudary url保存到mongoDb



我试图保存cloudary url到MongoDB,但真的不知道我的代码有什么问题,因为它不工作。

下面是我的代码:
exports.test = asyncHandler(async (req, res, next) => {
const email = req.params.email;
console.log
cloudinary.uploader
.upload(req.file.path, { folder: 'avatar' })
.then((result) => {
console.log(result);// shows correctly on console
const { secure_url, public_id } = result;
console.log('url:',secure_url)// url & secure_url shows correctly on console
console.log('public_url:',public_id);

Resume.findOneAndUpdate(

{
email:email,
},
{ $set: { imagePath: secure_url} },      
{
new: true,
fields: {
imagePath: 1,
},
}
);
console.log('upload successful!!');
})
.catch((error) => {
console.log(error);
});

});

我使用$set是因为我想创建一个以前不存在的字段。此外,我从cloudary成功获得public_id和secure_url,但它没有保存在我的数据库中。

下面是console.log(result)的输出:

{
asset_id: '1ee919b68e258c9778097e40671ac710',
public_id: 'seawedkarowxgnipz8hq',
url: 'http://res.cloudinary.com/workaman/image/upload/v1656322947/seawedkarowxgnipz8hq.png',
secure_url: 'https://res.cloudinary.com/workaman/image/upload/v1656322947/seawedkarowxgnipz8hq.png',
original_filename: 'file_cuyajt',
}

我是这样定义模型的:

const ResumeSchema = new mongoose.Schema({
imagePath:{
type:String,
required:false
},
cloudinary_Id:{
type:String,
required:false
},
})
我似乎错过了什么,但我真的不明白。当我从前端提交时,我得到消息console.log('upload successfully!!')"

我认为这里的问题是你将MongoDB Node.js SDK与Mongoose混合了一点。在您共享的代码中,您有ResumeSchemaResume-只需检查它们是否正确。

在Mongoose的findOneAndUpdate()方法没有一个$set选项。MongoDB CLI和随后他们的Node.js驱动程序也有findOneAndUpdate(),但该功能的签名和它的使用选项有些不同。

如果没有看到你的代码的其余部分,很难告诉到底发生了什么,但我的直觉是,你混淆了这两个方法。我希望这对你有帮助。

最新更新