javascript - 无法将 JSON 对象返回给调用程序

标签 javascript json angular

我正在运行下面的代码,允许用户登录系统。作为此功能的一部分,正在使用 HTTP POST(返回 Observable)。由于这是使用 JWT,因此我必须提取 TOKEN 中的值。

我想以 JSON 格式将 Observable(带有这些 TOKEN 值)返回给调用程序。我尝试使用 map 功能如下:

adminLogin(username, password) {
        let url = `${this._apiRoot}/login`;
        let tokenResp = {};


        this.http.post(url, JSON.stringify({ username: username, password: password }), { observe: 'response' })
          .map(response => response.json())
          .subscribe((response: HttpResponse<any>) => {
         [ ... snip ...]

但我的经验是“订阅”永远不会被调用。

我能做什么?

TIA

原始代码

adminLogin(username, password) {
        let url = `${this._apiRoot}/login`;
        let tokenResp = {};


        this.http.post(url, JSON.stringify({ username: username, password: password }), { observe: 'response' })

          .subscribe((response: HttpResponse<any>) => {

            let token = response.headers.get("Authorization");

            if (token) {

              let t = JWT(token);

              console.log("-- what is in the token --");
              console.log(t);

              // need to set the value here
              this.userLoggedIn.next(setUser);

            }
          },
          (error: HttpErrorResponse) => {
            if (error.error instanceof Error) {
              let errorFound = console.error(error.status + " " 
                    + error.error.message + " " + error.message );
              console.error(errorFound);
              return Observable.throw(errorFound);
            }
            else {
              let errorFound = "Server-Side Error has taken place ";
              console.error(errorFound);
              return Observable.throw(new Error(errorFound));
            }
          });
      }

最佳答案

如果你想用 Token 返回一个 observable(无论什么类型),你不能将你的 subscribe 方法参数类型设置为 HttpResponse。我以为你会得到 ts 编译错误

试试这个

adminLogin(username, password) : Observable<JWT> //Assuming this is a type
    this.http.post(url, JSON.stringify({ username: username, password: password }), { observe: 'response' })

              .map((response: HttpResponse<any>) => {

                let token = response.headers.get("Authorization");

                if (token) {

                  let t = JWT(token);

                  return t;
                }
                return null; //Or error
              },
          //Error handling

并在调用方法中

adminLogin(username,password).subscribe((token: JWT )=>
{
//use token
}

关于javascript - 无法将 JSON 对象返回给调用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48800902/

相关文章:

javascript - 客户端(使用 JavaScript/JQuery)应该在多大程度上防止快速表单提交?

json - 使用 SwiftyJSON 或 Alamofire 将图像文件发布到服务器

json - 如何在 jax-rs 的 post 请求中处理 Json 主体

Angular 没有剪贴板的提供者

javascript - Chrome扩展程序检测用户添加的新标签

javascript - $state.go 没有获取模板

javascript - .addClass() 在 JS Fiddle 之外不起作用

Python - 如果找不到 json 元素如何继续

javascript - 用 Jasmine 测试被拒绝的 promise

javascript - Angular 4 和 typescript