У нас есть форма, в которой мы хотим обновить данные пользователя, но когда мы нажимаем кнопку обновления внешнего интерфейса, либо он показывает неверный запрос, либо ошибку 404, либо показывает, что httpstatus не определен в бэкэнде. Я предполагаю, что проблема не только на угловой стороне, но и на стороне узла js. Вот код:
Node.js
async EditUser(req, res) {
const schema = Joi.object().keys({
username: Joi.string()
.min(4)
.max(10)
.required(),
firstName: Joi.string().required(),
lastName: Joi.string().required(),
country: Joi.required(),
city: Joi.required(),
});
const { error, value } = Joi.validate(req.body, schema);
if (error && error.details) {
return res.status(HttpStatus.BAD_REQUEST).json({ msg: error.details })
}
const age = moment().diff(moment([value.byear, value.bmonth - 1, value.bday]), 'years');
const body = {
username: Helpers.firstUpper(value.username),
firstName:value.firstName,
lastName:value.lastName,
country:value.country,
city:value.city,
age:age,
description:value.description
};
User.findOneAndUpdate( {_id:req.body.id }, body, {new:true})
then(User => {
res
.status(HttpStatus.OK)
.json({ message: 'User updated successfully', User });
})
.catch(err => {
res
.status(HttpStatus.INTERNAL_SERVER_ERROR)
.json({ message: 'Error occured' });
});
}
Маршрутизатор
router.put('/user/edit-user', AuthHelper.VerifyToken, UserCtrl.EditUser);
У нас есть другие функции в том же файле, где использовался HTTpStatus, и без проблем.
Угловые детали
EditUser(body): Observable<any> {
return this.http.put(`${BASEURL}/user/edit-user`, body);
}
компонент
private populateForm() {
const unusedFields = [
..
..
];
const userInfo = Object.assign({}, this.user);
unusedFields.forEach((field) => delete userInfo[field]);
this.SettingsForm.setValue(userInfo);
}
private buildSettingsForm() {
this.SettingsForm = this.fb.group({
city: [null, [Validators.required, Validators.pattern('[a-zA-Z ]*')]],
country: [null, [Validators.required, Validators.pattern('[a-zA-Z ]*')]],
email: [null, [Validators.required, Validators.email], this.forbiddenEmails],
firstName: [null, [Validators.required, Validators.pattern('[a-zA-Z ]*')]],
lastName: [null, [Validators.required, Validators.pattern('[a-zA-Z ]*')]],
username: [null, [Validators.required, Validators.pattern('(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])')]]
});
this.SettingsForm.setValidators(this.minimumAge(18));
}
UpdateUser() {
this.usersService.EditUser(this.SettingsForm.value).subscribe(
data => {
this.router.navigate(['people']);
},
err => console.log(err)
);
}
HTML
<form action="" [formGroup]="SettingsForm" (ngSubmit)="UpdateUser()">
...
...
Что не так и как эту форму можно исправить и начать работать как положено?
Кроме того, что является причиной того, что после нажатия кнопки 404 он не находит 404.