我的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的新页面。关于如何实现这一目标的任何建议。因此,目前我可以连接到服务器并创建了一个用户,但是我没有收到服务器的响应,或者不确定如何处理响应。
答案 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>
希望有帮助!