ionic 4中的HTTP Post无法通过Web服务

时间:2019-09-05 20:55:03

标签: angular web-services http ionic-framework

我的ionic 4项目的register.page.ts文件中具有以下方法。每当我单击register.html表单上的“提交”按钮时,就会执行此操作。

register(form) {
this.authService.register(form.value).subscribe((res) => {
  this.router.navigateByUrl('login');
});
}

此方法使用我的auth.service.ts文件调用此方法。

register(postData: User): Observable<AuthResponse> {
return this.http.post<AuthResponse>(`https://1146c1fe.ngrok.io/register`,  
(postData)).pipe(
  tap(async (res: AuthResponse ) => {
    if (res.Success) {
      return true;
    } else {
      return false;
    }
  })

);

}

这用于通过创建的Web服务注册新用户。 我具有以下authresponse.ts接口,用于存储从服务器获取的信息。

我不确定该界面的外观。我只希望从服务器收到是或否,以确定用户是否可以注册。

网络服务

router.post('/register', (req, res) => {  
const user = req.body;   
const passwordPromise = util.promisify(bcrypt.hashSync);
const pass = bcrypt.hashSync(user.password);
let success = true;

createUser(user.name, user.email, pass, [], (err) => {
    if (err){
        success = false;
        res.send(success);
    }
});

res.end(success);
});

我想知道何时发送了成功信息,然后想加载一个名为tabs的新页面。关于如何实现这一目标的任何建议。因此,目前我可以连接到服务器并创建了一个用户,但是我没有收到服务器的响应,或者不确定如何处理响应。

1 个答案:

答案 0 :(得分:0)

尝试使用map而不是tap的RxJS运算符将寄存器更改为以下内容。 map用于转换响应,在这种情况下,强制转换为真实或虚假值。 tap不用于转换,而是副作用:

register(postData: User): Observable<AuthResponse> {
  return this.http.post<AuthResponse>(`https://1146c1fe.ngrok.io/register`, postData)
    .pipe(
      map((res: AuthResponse) => !!res.Success)
    );
}

话虽如此,您可能需要共享AuthResponse的定义。根据您的服务器代码,您似乎只是在向回发送一个简单的布尔值,而不是具有属性Success的对象。您可能要更新问题并从服务器中注销确切的响应,因为这肯定会更改map的使用方式。实际上,您可以在tap(response => console.log(response))之前的pipe()内添加map之类的东西,以查看收到了什么。

您应该真正考虑发送一些排序错误状态代码,例如4xx或5xx,以便您可以简单地使用subscribe()的成功/错误回调来更轻松地管理使用此服务的组件中的成功与错误。 / p>

希望有帮助!