我试图保存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混合了一点。在您共享的代码中,您有ResumeSchema
和Resume
-只需检查它们是否正确。
在Mongoose的findOneAndUpdate()方法没有一个$set
选项。MongoDB CLI和随后他们的Node.js驱动程序也有findOneAndUpdate()
,但该功能的签名和它的使用选项有些不同。
如果没有看到你的代码的其余部分,很难告诉到底发生了什么,但我的直觉是,你混淆了这两个方法。我希望这对你有帮助。