【问题标题】:Get content text when catching error in RxJs在 RxJs 中捕获错误时获取内容文本
【发布时间】:2017-02-10 19:28:50
【问题描述】:

我的 nodejs 服务器发送状态为 401 的错误消息:

使用此代码:

res.status(401).send('Invalid user or password '+info);

在客户端代码中,我想获取内容文本。我试试这个:

   ...
   return this.apiService.post(params)
        .map(res => res.json())
        .catch(this.handleError);
}

private handleError(err: any) {
   console.log('sever error:', err);
   return Observable.throw(err || 'backend server error');
}

但错误消息不是“无效的用户或密码”它是:

响应状态:401 未经授权的 URL: ip_address/auth/login

当我发现错误时如何获取内容文本(另一个状态码?另一种发送响应的方法?)

谢谢。

【问题讨论】:

    标签: node.js angular rxjs observable


    【解决方案1】:

    您要查找的服务器响应位于err._body

    ...
    return this.apiService.post(params)
         .map(res => res.json())
         // Use fat arrow for error handler also
         .catch(e => this.handleError(e));
    }
    private handleError(err: any) {
       console.log('sever error:', err._body);
       return Observable.throw(err || 'backend server error');
    }
    

    在 Safari、Chrome 和 Firefox 中测试过。

    【讨论】:

      【解决方案2】:

      如果 HTTP 客户端由于服务器响应而发出错误,则错误实例将包含 statusstatusText 属性,并且可以使用 text 方法获取错误响应的内容(与成功响应一样,错误可以使用textjson 方法访问响应内容):

      private handleError(err: any) {
        if (err.status) {
          console.log("status = " + err.status);
          console.log("statusText = " + err.statusText);
          console.log("text = " + err.text());
        } else {
          console.log('sever error:', err);
        }
        return Observable.throw(err || 'backend server error');
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-02
        • 2016-03-04
        相关资源
        最近更新 更多