Функция EditUser не работает в Angular с Node.js для обновления пользовательских данных - PullRequest
0 голосов
/ 03 января 2019

У нас есть форма, в которой мы хотим обновить данные пользователя, но когда мы нажимаем кнопку обновления внешнего интерфейса, либо он показывает неверный запрос, либо ошибку 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...