无法从Ionic应用程序发布HTTP请求

时间:2017-03-27 07:20:00

标签: node.js angular ionic2 passport.js passport-local

我正在尝试使用离子框架登录到本地托管的应用程序(现在)。

这是我用于登录的nodejs后端代码,用于Web应用程序,但现在我正在为android platfrom制作它

// process the login form
app.post('/login', passport.authenticate('local-login', {
    successRedirect: '/profile', // redirect to the secure profile section
    failureRedirect: '/login', // redirect back to the signup page if there is an error
    failureFlash: true // allow flash messages
}));

离子中的HTML代码     

    <ion-item>
        <ion-input type="text" placeholder="Email" name="email" [(ngModel)]="email"></ion-input>
    </ion-item>

    <ion-item>
        <ion-input type="password" placeholder="Password" name="password" [(ngModel)]="password"></ion-input>
    </ion-item>

</ion-list>

名为:

的登录功能
login() {
this.http.post('10.222.103.169:8080/login', JSON.stringify({ email: this.email, password: this.password }))
    .map((response: Response) => {

        let user = response.json();
        console.log(user);
        if (user && user.token) {
            // store user details and jwt token in local storage to keep user logged in between page refreshes
            localStorage.setItem('currentUser', JSON.stringify(user));
        }
    }
}

如果我使用.subscribe方法为帖子提供错误 其他登录方式:

login() {
    this.http.post('10.222.103.169:8080/login', JSON.stringify({ email: this.email, password: this.password }))
    .subscribe(data => {
        console.log(data);
    });
}
  <。> ./LoginPage类LoginPage中的运行时错误错误 - 由:失败引起   在'XMLHttpRequest'上执行'open':无效的URL

但链接正确且有效 现在问题是它甚至没有将post请求发送到服务器。

PS:我是angular2的新手。

2 个答案:

答案 0 :(得分:1)

你必须如下所示。这是post方法的Angular方式。希望代码是自我解释的。如果你需要任何帮助,请随时在下面发表评论。

      //login
      loginUser(email: string, password: string): Observable<any> {
        let headers = new Headers();
        headers.append('content-type', 'application/json');
        let body = { email: email, password: password };
        let options = new RequestOptions({ headers: headers });
        let url = this.authenticationEndPoint + encodeURI(username) + '&password=' + encodeURI(password);

        return this.http.post(url, body, options)
          .map(this.extractData)
          .catch(this.handleError);
      }

 //to extract data
  private extractData(res: Response) {
    let body = res.json();
    return body || {};
  }

  //to handle error
  private handleError(error: Response | any) {
    let errMsg: string;
    if (error instanceof Response) {
      const body = error.json() || '';
      const err = body.error || JSON.stringify(body);
      errMsg = `${error.status} - ${error.statusText || ''} ${err}`;
    } else {
      errMsg = error.message ? error.message : error.toString();
    }
    console.error(errMsg);
    return Observable.throw(errMsg);
  }

答案 1 :(得分:0)

将params分配给URLSearchParams对象

 login() {
 let params = new URLSearchParams;
params.append('email',this.email);
params.append('password',this.password);
    this.http.post('10.222.103.169:8080/login',search:params )
        .map((response: Response) => {
            let user = response.json();
            console.log(user);
            if (user && user.token) {
                // store user details and jwt token in local storage to keep user logged in between page refreshes
                localStorage.setItem('currentUser', JSON.stringify(user));
            }
        }
    }