как получить строку из наблюдаемой <any>в Angular - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть служба бэкэнда Rest, которая возвращает строку:

@GetMapping("/role/{id}")
    public String trouverRole (@PathVariable("id") String username) {
    User u= userrepository.findByUsername(username);
    return u.getRoles().get(0).getName();

    }

Я пытаюсь получить строку и использовать ее в файле angular .ts: Мой код службы:

getrole(name: string): Observable<any> {

    return this.http.get('http://localhost:8080/api/role/'+name);

  }

Мой .ts код:

login(){
    this.loginService.authentificate(this.credentials,()=>{

     this.loginService.getrole(this.credentials.username).subscribe(
      data => {
      this.role=JSON.stringify(data);
   });

      if ( this.role=="ROLE_ADMIN" )
          { this.router.navigateByUrl('/home/(contentOutlet:produit)');}

          else console.log(this.role);
          /*
      else 
      { this.router.navigateByUrl('/home/(contentOutlet:dashboard)')}*/
    })

  }

Я получаю эту ошибку:

"Неожиданный токен R в JSON в позиции 0"

Ответы [ 2 ]

0 голосов
/ 20 февраля 2020

Я решил проблему. Поэтому я должен был указать тип возвращаемого значения, добавив: {responseType: 'text'}

Мой сервис после изменений:

    getrole(name: string): Observable<any> {

        return this.http.get('http://localhost:8080/api/role/'+name,{responseType: 
   'text'});

      }

И не нужно использовать JSON .stringify, написание this.role = данных; правильно сделать

0 голосов
/ 20 февраля 2020

Прежде всего, у вас есть некоторые ошибки в вашем коде:

login(){
    this.loginService.authentificate(this.credentials,()=>{
        this.loginService
               .getrole(this.credentials.username)
               .subscribe(data => {
                  this.role = data // No need to stringify, your response (i am asuming) is a text
        });

    // This will allways return false as this.role is still undefined
      if (this.role === "ROLE_ADMIN")
         this.router.navigateByUrl('/home/(contentOutlet:produit)');
      else 
         console.log(this.role);
    })

  }

Итак, для начала выдается Unexpected token R in JSON at position 0, потому что вы используете JSON.stringfy(), то есть fundtion, который принимает объект json и вернуть строку json. Ваш сервер повторно запускает строку, поэтому эта функция выдаст ошибку.

, тогда для части, где вы проверяете this.role, this.role не будет установлен до тех пор, пока не будет получен ответ REST API. поэтому вы должны написать свой код следующим образом.

.subscribe(data => {
    this.role = data;
    // here you are sure that the role is set to what you are expecting
    // TODO: <-- HERE YOU PUT YOUR CODE THAT DEPENDS ON "ROLE"
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...