Угловой Http get метод разница между getById и getByName - PullRequest
0 голосов
/ 24 августа 2018

Я изучаю основы Angular и в настоящее время работаю над созданием REST-сервиса с использованием HttpClient из @ angular / common / http.

Во многих руководствах первым шагом является вызов http.get ().Обычно сначала весь список после вызова http.get () фокусируется на извлечении только одного элемента.В моем примере у меня есть userList (с пользователями).Я сделал два метода: getUserById () и getUserByName ().$ {this.userUrl} относится к расположению базы данных (с использованием файла JSON). Ниже они отображаются:

constructor(private http: HttpClient) {
}

getUserById(id: number): Observable<IUser> {
    return this.http.get<IUser>(`${this.userUrl}/${id}`);
}

getUserByName(name: string): Observable<IUser> {
    return this.http.get<IUser>(`${this.userUrl}/?name=${name}`);
}

Изначально я пытался заставить метод getUserByName () работать так же, как getUserById().Таким образом, используя:

getUserByName(name: string): Observable<IUser> {
    return this.http.get<IUser>(`${this.userUrl}/${name}`);
}

Это не сработало, и я получил сообщение об ошибке 404 файл не найден.Это файл json, с которым я работал (я настроил сервер json, чтобы я мог также выполнять методы http.delete () и т. Д.):

{"users": [
{
  "id": 1,
  "name": "James",
  "lastName": "Jameson",
  "dateOfBirth": "10-10-2000",
  "occupation": "Student"
},
{
  "id": 3,
  "name": "Steven",
  "lastName": "Stevenson",
  "dateOfBirth": "10-10-1990",
  "occupation": "Police officer"
}]}

Может кто-нибудь объяснить мне, почему getUserByIdметоды работают, используя только '/ $ {id}' в вызове url, и почему getUserByName должен использовать '? / name = $ {name}'?

Ответы [ 2 ]

0 голосов
/ 24 августа 2018

Это не имеет ничего общего с Angular, это чисто проблема конечной точки бэкэнда.

Проверка запросов к бэкэнду с помощью HTTP Rest Client, такого как PostMan.

Как только все работает набэкэнд, как и ожидалось, затем интегрировать с Angular.

0 голосов
/ 24 августа 2018

если вы используете:

getUserById(id: number): Observable<IUser> {
    return this.http.get<IUser>(`${this.userUrl}/${id}`);
}

getUserByName(name: string): Observable<IUser> {
    return this.http.get<IUser>(`${this.userUrl}/${name}`);
}

и вызываете для примера / user3262578, он войдет в метод первой конечной точки, который является getUserById(id), у вас явно есть неоднозначность.оба метода имеют одинаковые конечные точки.
попробуйте изменить вторую конечную точку (getUserByName) на другую ссылку, например:

return this.http.get<IUser>(`${this.userUrl}/search/${name}`);
...