, поэтому у меня возникли проблемы при попытке выяснить, что именно консольный журнал пытается сообщить мне с этой ошибкой.Я переписывал свой маршрут загрузки так много раз, и я в замешательстве.
У меня есть загрузка файлов (img) в Cloudinary, все работает (у меня есть другой маршрут, где сообщения загружаются правильно).
Вот соответствующие части моего кода.
UserSchema (проблема связана с профилем: аватар, фон, но я все равно опубликую всю схему)
const UserSchema = new Schema({
username: {
type: String,
required: true,
minlength: [3, "Username must be at least 3 characters long"],
maxlength: [25, "Username must be no longer than 25 characters"],
index: [true, "Username is already in use, please try another"],
unique: true,
trim: true
},
email: {
type: String,
required: true,
validate: [
/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/, "Email is not valid, please enter a valid email"
],
lowercase: true,
index: true,
unique: true
},
password: {
type: String,
required: true,
minlength: 6,
required: true
},
posts: [{type: Schema.Types.ObjectId, ref: 'Post'}],
profile: {
website: {type: String, validate: [
/^((https?|ftp|smtp):\/\/)?(www.)?[a-z0-9]+\.[a-z]+(\/[a-zA-Z0-9#]+\/?)*$/, "URL not valid, please enter a valid URL"
],
lowercase: true,
trim: true
},
forHire: {type: Boolean, default: false},
location: {type: String, maxlength: 40 },
bio: {type: String, maxlength: 500},
avatar:{
url: {type: String, default: "/static/img/defaultAvatar.png" },
public_id: {type: String}
},
background: {
url:{type: String, default: "/static/img/defaultBG.png"},
public_id: {type: String}
}
}
}, {timestamps: true});
И маршрут (собирается отделить контроллер от маршрута, как только я смогу это выяснить!)
router.put('/:id', auth, uploader.fields([{ name: 'profile.avatar', maxCount: 1 }, { name: 'profile.background', maxCount: 1 }]), (req, res) => {
console.log(req.files)
User.findByIdAndUpdate({_id: req.params.id}).then((user) => {
console.log(user)
if (user.id !== req.user.id) {
return res.status(400).json({message: "You are not authorized to edit this User profile."})
}
// const profileImg = {
// profile:{avatar: {url: req.file.url, public_id: req.file.public_id}}
// }
// console.log(profileImg)
// const backgroundImg = {
// profile: {background: {url: req.file[1].url, public_id: req.file[1].public_id}}
// }
user.update(req.body, profileImg, backgroundImg).then(result => console.log(result))
}).catch(err => console.log(err.message))
})
И чтобы проверить его с почтальоном, у меня есть поле файла с именем "profile.avatar", чтобы соответствоватьПоля name, закомментированные profileImg и backgroundImg специально.
Любая помощь, которая может быть предоставлена, будет очень полезной!