我是node.js的新手,正在尝试将用户的照片保存到mongodb中。
这是路由器:
router.post('/addphoto', checkAuth, upload.single('image'), (req, res)=> {
let filename = Math.floor(Math.random() * 100000)
console.log('imgId is', filename );
const photoFields = {};
photoFields.photos = []
if(req.file) photoFields.image = req.file.path ;
photoFields.user = req.user.id;
Photo.findOne({ _id: req.user.id }).then(photo => {
if(photo) {
//Update
console.log('photo found! \n\n');
Photo.findOneAndUpdate(
{user: req.user.id},
{$set: photoFields},
{new: true}
).then(photo => res.json(photo));
} else {
console.log('No photo found! \n\n');
//Create
photoFields.photos[0].imgId = filename ;
photoFields.photos[0].isProfileImg = true ;
photoFields.photos[0].visible = 'all';
//Save
new Photo(photoFields).save().then(photo=> {
res.json(photo);
}).catch(err => {
console.log('could not save photo \n\n');
console.log(err);
}
);
}
})
});
每个用户都可以上传多张照片,因此这是照片架构,其中照片是对象的数组:
const PhotoSchema = new Schema({
user: {
type: Schema.Types.ObjectId,
ref: 'users'
},
photos: [
{
imgId: {
type: Number,
},
isProfileImg: {
type: Boolean,
default: true,
},
visible: {
type: String,
}
}
]
});
如您所见,我使用随机函数创建了imgId,并且可以看到它是创建的:
imgId is 65609
但是,我仍然在控制台中收到此错误:
(node:5295) UnhandledPromiseRejectionWarning: TypeError: Cannot set property 'imgId' of undefined
并且没有图像被保存。
我正在使用multer从请求中提取文件,并且可以在控制台中设置正在接收文件。
感谢您提出的解决此错误的建议,该错误使我困扰了几个小时。
答案 0 :(得分:1)
您将imgId
放在一个地方,在没有找到照片的else子句中,
在声明中
photoFields.photos[0].imgId = filename ;
列表photoFields.photos
为空,因此第一个元素
photoFields.photos[0]
是undefined
。
改为执行类似的操作。
photoFields.photos.push({
imgId: filename,
isProfileImg: true,
visible: 'all',
})