Http-ошибка - PullRequest
       3

Http-ошибка

1 голос
/ 29 апреля 2019

Я работаю с Symfony и Angular для реализации мини-проекта. Я добавил маршрут в свой файл routing.yml, чтобы редактировать пользователя. В угловом интерфейсе я пытаюсь получить пользователя по его идентификатору, но получаю ошибку 404.

No route found for "GET /user/NaN" (from "http://localhost:4200/edit-user")

вот файл routing.yml:

pr_manager_update:
    path:     /user/update/{id}
    defaults: { _controller: PrManagerBundle:User:update}

Угловой сервис:

getUserById(id: number) {
  return this.http.get(Statique.USER_ID + '/' + id);
 }
static USER_ID = 'http://localhost/project-manager/backend/web/app_dev.php/user';

И компонент:

import { Component, OnInit } from '@angular/core';
import { eb_user } from 'src/app/classes/eb_user';
import { FormGroup, FormBuilder, Validators } from '@angular/forms';
import { Router } from '@angular/router';
import { CreateService } from 'src/app/services/create.service';
import { first } from 'rxjs/operators';

@Component({
  selector: 'app-edit',
  templateUrl: './edit.component.html',
  styleUrls: ['./edit.component.scss']
})
export class EditComponent implements OnInit {

  user: eb_user[];
  updateForm: FormGroup;

  constructor(private formBuilder: FormBuilder,
              private router: Router,
              private createService: CreateService) { }

  ngOnInit() {
    let userId = localStorage.getItem("editUserId");
    if(!userId){
      alert("erreur")
      this.router.navigate(['liste-user']);
      return;
    }
    this.updateForm = this.formBuilder.group({
      id: [],
      nom: ['', Validators.required],
      prenom: ['', Validators.required],
      tel: ['', Validators.required],
      mail: ['', Validators.required],
      domaine: ['', Validators.required],
      //client: eb_user[];
      //x_eb_role : ['', Validators.required],
    });
    this.createService.getUserById(+userId)
        .subscribe(data => {this.updateForm.setValue(data);});
  }

  onSubmit(){
    this.createService.editUser(this.updateForm.value)
        .pipe(first())
        .subscribe(
          data =>{
            this.router.navigate(['liste-user']);
          },
         error => {
           alert(error);
         }

        );
  }

}

Я ожидаю, что соединение между бэкэндом и внешним интерфейсом будет выполнено правильно

1 Ответ

1 голос
/ 29 апреля 2019

Ваш userId, вероятно, не числовой, см. Следующий пример:

let userId = "10"; // a numberic string
console.log(+userId); // will give a number 10

userId = "hello"; // a non numeric string
console.log(+userId); // will give NaN

URL-адрес в любом случае будет строкой, и вам не нужно разбирать userId на число, которое в итоге будет снова объединено со строкой, просто выполните:

this.createService.getUserById(userId) // no +userId
        .subscribe(data => {this.updateForm.setValue(data);})

Изменить тип параметра метода getUserById ():

getUserById(id: string | number) {
  return this.http.get(Statique.USER_ID + '/' + id);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...