当前位置: 首页 > Web前端 > HTML

使用angular4和nodejs-express搭建一个简单的网站(五)-用户注册登录-HttpClient

时间:2023-04-02 20:05:43 HTML

上一节简单介绍了angular搭建的主要路由模块。根据上一节的介绍,主页面加载直接跳转到用户管理界面,下面介绍用户管理模块。应用启动后,初始界面应该是这样的:用户管理模块(users)包括主模块UsersModule和HomeComponent、LoginComponent、RegistComponent、UsersComponent几个组件和路由模块UsersRoutingModule和一个服务类UserService,因为这个服务需要要在其他模块中使用,先放在AppModule的providers中,现在AppModule的providers应该是这样的:providers:[JumbotronServive,UserService,],UserServiceUserService类主要负责传递将用户的注册登录信息发送到服务器,代码如下:common/http';从'rxjs/Observable'导入{Observable};@Injectable()exportclassUserService{constructor(privatehttp:HttpClient){}//注册用户saveUser(user:User){constsavedUser={name:user.name,password:user.password,email:user.email}returnthis.http.post('http://localhost:3000/users/register',savedUser,{responseType:"json"});}//登录getUser(用户:用户){constloginUser={名称:用户名,密码:用户密码};returnthis.http.post('http://localhost:3000/users/login',loginUser,{observe:'response'});}//错误处理handleError(err:HttpErrorResponse):string{if(err.errorinstanceofError){return'发生错误,错误信息:'+err.error.message;}else{console.log(`后端返回代码${err.status},bodywas:${err.error['msg']}`);返回err.error['msg'];}}}这里用到了User类,User类的代码:exportclassUser{constructor(publicid:number,publicname:string,publicpassword:string,publicemail:string){}}最重要的UserService中的是HttpClient,这是angular4之后新增的功能。Angular为应用程序提供了一个简化的API来实现HTTP功能,它基于浏览器提供的XMLHttpRequest接口。HttpClient带来的其他优势包括:可测试性、强类型请求和响应对象、发起请求和接收响应时的拦截器支持以及基于Observable对象的更好的错误处理机制。使用HttpClient首先要引入HttpClientModule,将HttpClientModule导入到AppModule的NgModule的imports属性数组中。saveUser()方法负责将用户的注册信息发布到后台服务器。它接收一个User类的对象作为参数,通过HttpClient类型的对象http的post方法将包含用户名、密码和用户邮箱(可以为空)的saveUser对象传递给服务器。后台注册成功后,会返回状态为200的认证信息。(后台数据处理详见Angular4和Nodejs-express搭建简易网站(三)——快速访问Mysql)。getUser()方法也接收一个User类的对象作为参数,将登录用户名和密码发布到后台服务器。如果用户名和密码匹配,它还会返回状态为200的身份验证信息。saveUser和getUser方法都返回一个Observable>对象。当我们调用这两个方法时,需要使用Observable的subscribe方法进行订阅,才能真正发起请求,获取后端返回的数据。handleError()方法负责错误处理,它接收一个HttpErrorResponse类型的参数。HttpClient一般有两类错误。如果后端返回失败的返回码(如404、500等),则会返回错误。如果客户端出现错误(例如RxJS运算符抛出的异常或某些阻止请求完成的网络错误),将抛出Error类型的异常。在这个方法中,这两类错误是分开处理的。