【问题标题】:Can't solve options in Angular reponse无法解决 Angular 响应中的选项
【发布时间】:2021-01-17 10:12:41
【问题描述】:

当后端的响应为 200 时,我无法在本地存储中设置项目。似乎它无法识别请求的状态。

    options = {
    headers: new HttpHeaders({
      'Content-Type':  'application/json',
      'Access-Control-Allow-Origin': '*',   
      'Authorization': 'Bearer '+localStorage.getItem("access_token")
    }),
    observe: "response", // to display the full response
    responseType: "json"
  };


  
  constructor(private http: HttpClient, private router: Router) { 
   }
  
  authenticate(url, data, options) {
 
      this.http.post(environment.getBaseAddress() +url+'/', data, options).subscribe((data:any) =>  {
        if (data.status == 200) {
        localStorage.setItem("access_token", data['access_token']);
        console.log(data.status)
        }
        else this.router.navigateByUrl('something-else');
        })

      
    }

【问题讨论】:

  • 此外,如果订阅块的成功部分正在执行,则隐含意味着您的 api 调用已成功。在这种情况下,您甚至可能不需要担心状态代码。
  • 我无法共享 access_token 但 console.log(data.status) 没有返回任何内容。谢谢你的洞察力。那么如何在 if 语句中处理响应成功?
  • 这很可能是因为 api 返回的数据对象上没有名为 status 的属性。
  • 从你目前分享的内容来看,成功时你想保存访问令牌,出错时你想重定向到另一条路线 - 这是正确的吗?
  • 啊,好的,明白了。您认为选项部分是否正确完成?当我在 this.http.post(environment.getBaseAddress() +url+'/', data, {observe: "response") 中添加 observe: 'response' 时,一切正常。当我在选项中添加它时,问题就开始了。

标签: angular typescript api response status


【解决方案1】:

订阅块的 next 回调被执行的事实意味着您的 API 调用成功。所以你不需要显式检查状态码,你也可以这样做:

this.http.post(environment.getBaseAddress() +url+'/', data, options)
    .subscribe((data:any) => {
       localStorage.setItem("access_token", data['access_token']);
    }, (err) => {
       this.router.navigateByUrl('something-else');
    });

More 订阅回调。

【讨论】:

    猜你喜欢
    • 2015-06-19
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    • 2017-08-30
    • 2020-04-11
    相关资源
    最近更新 更多