TypeError:token.split不是函数

时间:2019-04-11 07:09:45

标签: node.js angular jwt-auth

我在登录时遇到一些错误,这不是预期的,但是我尝试从2天开始解决它,但我不能。我将Nodejs用于api,将angular 7用于前端

我发布了一些带有错误的代码 请帮我解决这个问题 非常感谢您

auth.service.ts

a = [{"a":"data1","b":"Nill","c":"data3","d":"Nill"},{"a":"dat1","b":"dat2","c":"dat3","d":"Nill"},{"a":"sa1","b":"sa2","c":"sa3","d":"Nill"}]

c = Counter()
for d in a:
   c.update({k: v == 'Nill' for k, v in d.items()})

# c => Counter({'a': 0, 'b': 1, 'c': 0, 'd': 3})

login.component.ts

import { Injectable } from "@angular/core";
import { Observable } from "rxjs";
import "rxjs/Rx";
import { JwtHelperService } from "@auth0/angular-jwt";
import "core-js/es7/reflect";

import { HttpClient } from "@angular/common/http";

const jwt = new JwtHelperService();
@Injectable()
export class AuthService {
  private decodedToken;
  constructor(private http: HttpClient) {}
  public register(userData: any): Observable<any> {
    return this.http.post("/api/v1/users/register", userData);
  }
  public login(userData: any): Observable<any> {
    return this.http.post("/api/v1/users/auth", userData).map(token => {
      //debugger;
      return this.saveToken(token);
    });
  }

  private saveToken(token): string {
    //debugger;
    this.decodedToken = jwt.decodeToken(token);
    localStorage.setItem("bwm_auth", token.token);
    localStorage.setItem("bwm_meta", JSON.stringify(this.decodedToken));
    return token;
  }
}

浏览器错误

import { Component, OnInit } from "@angular/core";
import { Router, ActivatedRoute } from "@angular/router";
import { AuthService } from "../shared/auth.service";
import { FormBuilder, FormGroup, Validators } from "@angular/forms";

@Component({
  selector: "bwm-login",
  templateUrl: "./login.component.html",
  styleUrls: ["./login.component.scss"]
})
export class LoginComponent implements OnInit {
  loginForm: FormGroup;
  mistake: any[] = [];
  notifyMessage: string = "";
  constructor(
    private fb: FormBuilder,
    private auth: AuthService,
    private router: Router,
    private route: ActivatedRoute
  ) {}

  ngOnInit() {
    this.initForm();
    this.route.params.subscribe(params => {
      if (params["registered"] == "success") {
        //debugger;
        this.notifyMessage =
          "You have been successfully registered you can login now";
      }
    });
  }
  initForm() {
    this.loginForm = this.fb.group({
      email: [
        "",
        [
          Validators.required,
          Validators.pattern(
            "^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:.[a-zA-Z0-9-]+)*$"
          )
        ]
      ],
      password: ["", Validators.required]
    });
  }
  isInvalidForm(fieldName): boolean {
    return (
      this.loginForm.controls[fieldName].invalid &&
      (this.loginForm.controls[fieldName].dirty ||
        this.loginForm.controls[fieldName].touched)
    );
  }
  isRequiredForm(fieldName): boolean {
    return this.loginForm.controls[fieldName].errors.required;
  }
  login() {
    // debugger;

    //console.log(this.loginForm.value);
    this.auth.login(this.loginForm.value).subscribe(
      token => {
        //debugger;
        this.router.navigate(["/rentals"]);
      },
      errorResponse => {
        // debugger;
        console.log(errorResponse);
        // this.mistake = errorResponse.error.errors;
        //this.mistake = errorResponse.error;
      }
    );
  }
}

error in browser

1 个答案:

答案 0 :(得分:-1)

从服务器返回的令牌似乎不是字符串类型

   a   b  c
1 bob  3 home
2 bart 4 away
3 bob  5 gone

尝试检查它从服务器返回什么