0
votes

Httpparams ne demande pas filtré json filtré

J'ai une requête HTTP vraiment simple.

Mon extrémité avant: p> xxx pré>

mon onduleur (): p> xxx pré>

My Perservice GetPersonName (): P>

  private personURL = 'http://localhost:3000/api/persons'

  constructor(private http: HttpClient) { }


  getPersonByName(): Observable<Person> {

     let params = new HttpParams().set('username', 'SwaX');

     return this.http.get<Person>(this.personURL, { params });
 }


8 commentaires

Montrer votre backend. Qu'est-ce qu'il s'attend à des paramètres?


La demande fonctionne. Le filtrage via l'objet httpparam "param" ne fonctionne pas.


Je veux juste savoir que votre backend s'attend à ce que l'ID ou le nom d'utilisateur


Vous avez testé la demande avec une autre application comme Postman? Ça marche?


Je vais l'essayer avec le facteur. Loopback me dit "Réponse de serveur 200" et je reçois les objets de la personne.


Postman me donne aussi la réponse que j'attends.


Afficher l'URL Postman que vous avez testé


localhost: 3000 / API / Personnes


3 Réponses :


0
votes

Ceci est un problème avec votre API, pas angulaire. Vous ne filtrez pas votre réponse avant de l'envoyer sur le fil. Vous pouvez le corriger sur le côté API et le renvoyer un seul objet au lieu d'un tableau d'objets ou vous pouvez filtrer l'objet de la réponse dans la méthode GetPersonbyName de votre service () à l'aide de la carte -

getPersonByName(username: string): Observable<Person> {
    return this.http.get<Person[]>(this.personURL)
        .pipe(
           .map(people => people.find(person => person.username === username)
        );
}


3 commentaires

Lorsque j'essaie d'utiliser trouver (), je reçois "la recherche" de la propriété "n'existe pas sur le type" personne "." Que devrais-je faire?


Il me manquait un .pipe () là-bas. Essayez-le avec la méthode de la carte enveloppée dans le tuyau comme indiqué dans le snippet édité ci-dessus.


Honnêtement, même si j'irais avec ce que les autres disent et obtiennent votre API pour renvoyer l'objet spécifique au lieu de la filtrer à partir d'une liste. Il est plus propre d'obtenir exactement ce dont vous avez besoin de l'API au lieu de passer à travers un tas de données sur le frontend.



0
votes

Essayez:

return this.http.get<Person>(`${this.personURL}/1`);


6 commentaires

j'ai toujours 3 objets


J'essaie de filtrer cette URL: localhost: 3000 / API / personnes à seulement 1 objet. Est-ce la mauvaise façon de penser? Parce que je viens de voir que Loopback a préparé cette URL pour moi: get / personnes / {id} et je l'ai essayé comme ça: Localhost: 3000 / API / Personnes / 1 qui fonctionne. Donc, je dois changer quelque chose dans l'API?


Essayez this.http.get ( $ {this.personurl} / 1 );


J'ai essayé ce renvoyer cela.http.get (this.personurl + '/ 1'); et je n'ai que 1. mais il est filtré par l'identifiant non filtré.


Pour cela, votre backend devrait avoir un point final qui accepte le nom d'utilisateur> Faites-le votre backend?


Ok je l'obtiens que j'essaie d'entrer dans les points d'extrémité et d'en savoir plus sur ce merci. Maintenant, je sais quoi faire. Parce que je n'ai aucune connaissance de ce que jamais à propos des points finaux. Merci!



0
votes

Peut-être que vous manquez quelque chose de petit, et c'est que les httpparams de la demande seraient mappés pour rejoindre l'URL. Ensuite, faire xxx

est similaire à faire xxx

qui devrait produire les mêmes résultats. Comme il s'agit d'une demande , vous pouvez également le tester à l'aide de votre navigateur. Ouvrez simplement

http: // localhost: 3000 / API / personnes? Nom d'utilisateur = swax

sur votre navigateur et voyez ce qui vient. De cette façon, vous pourrez déterminer si le problème vient de votre API ou non.


0 commentaires