基于angular2 的 http服务封装的实例代码


Posted in Javascript onJune 29, 2017

最近在项目中折腾了下angular2,所以出来跟大家分享,希望有帮助,每个公司业务不一样,按实际情况而定,个人学习心得,不作为标准。

1、定义http-interceptor.service.ts服务,统一处理http请求

/**
 * name:http服务
 * describe:对http请求做统一处理
 * author:Angular那些事 
 * date:2017/6/3
 * time:11:29
 */
import {Injectable}    from '@angular/core';
import {Http, Response}   from '@angular/http';
import 'rxjs/add/operator/toPromise';

@Injectable()
export class HttpInterceptorService {

 constructor(private http: Http) {
 }

 /**
 * 统一发送请求
 * @param params
 * @returns {Promise<{success: boolean, msg: string}>|Promise<R>}
 */
 public request(params: any): any {
 if (params['method'] == 'post' || params['method'] == 'POST') {
  return this.post(params['url'], params['data']);
 }
 else {
  return this.get(params['url'], params['data']);
 }
 }

 /**
 * get请求
 * @param url 接口地址
 * @param params 参数
 * @returns {Promise<R>|Promise<U>}
 */
 public get(url: string, params: any): any {
 return this.http.get(url, {search: params})
  .toPromise()
  .then(this.handleSuccess)
  .catch(res => this.handleError(res));
 }

 /**
 * post请求
 * @param url 接口地址
 * @param params 参数
 * @returns {Promise<R>|Promise<U>}
 */
 public post(url: string, params: any) {
 return this.http.post(url, params)
  .toPromise()
  .then(this.handleSuccess)
  .catch(res => this.handleError(res));
 }

 /**
 * 处理请求成功
 * @param res
 * @returns {{data: (string|null|((node:any)=>any)
 */
 private handleSuccess(res: Response) {
 let body = res["_body"];
 if (body) {
  return {
  data: res.json().content || {},
  page: res.json().page || {},
  statusText: res.statusText,
  status: res.status,
  success: true
  }
 }
 else {
  return {
  statusText: res.statusText,
  status: res.status,
  success: true
  }
 }

 }

 /**
 * 处理请求错误
 * @param error
 * @returns {void|Promise<string>|Promise<T>|any}
 */
 private handleError(error) {
 console.log(error);
 let msg = '请求失败';
 if (error.status == 400) {
  console.log('请求参数正确');
 }
 if (error.status == 404) {

  console.error('请检查路径是否正确');
 }
 if (error.status == 500) {
  console.error('请求的服务器错误');
 }
 console.log(error);
 return {success: false, msg: msg};

 }

}

2、在每一个模块创建一个service,service定义此模块的所有http数据请求,我这里演示登录模块:login.service.ts

/**
 * name:登录服务
 * describe:请输入描述
 * author:Angular那些事
 * date:2017/6/1
 * time:00:13
 */
import {Injectable}    from '@angular/core';

import {HttpInterceptorService} from 'app/commons/service/http-interceptor.service'

@Injectable()
export class LoginService {

 constructor(private httpInterceptorService: HttpInterceptorService) {
 }

 /**
 * 登陆功能
 * @param params
 * @returns {Promise<{}>}
 */
 login(userName: string, passWord: string) {

 return this.httpInterceptorService.request({
  method: 'POST',
  url: 'http://119.232.19.182:8090/login',
  data: {
  loginName: userName,
  password: passWord
  },
 });

 }

 /**
 * 注册
 * @param user
 * @returns {any}
 */
 reguster(user: any) {

 return this.httpInterceptorService.request({
  method: 'POST',
  url: 'http://119.232.19.182:8090/reguster',
  data: {
  user: user
  },
 });

 }
}

3、在component注入servicelogin.service.ts。调用seriveLogin.service.ts服务定义的方法,这里通过login.component.ts演示

/**
 * name:登录组件
 * describe:请输入描述
 * author:Angular那些事
 * date:2017/6/1
 * time:00:30
 */
import {Component} from '@angular/core'
import {LoginService} from './login.service'

@Component({
 selector: 'login',
 templateUrl: './login.component.html',
 providers: [LoginService],
})

export class LoginComponent {
 private userName: string;
 private passWord: string;

 constructor(private loginService: LoginService) {
 }

 /**
 * 登录
 */
 toLogin() {
 this.loginService.login(this.userName, this.passWord).then(result => {
  console.log(result);//打印返回的数据
 });
 }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
NiftyCube——轻松实现圆角边框
Feb 20 Javascript
Javascript 中介者模式实例
Dec 16 Javascript
最佳的addEvent事件绑定是怎样诞生的
Oct 24 Javascript
Seajs的学习笔记
Mar 04 Javascript
深入分析JSONP跨域的原理
Dec 10 Javascript
js实现类似jquery里animate动画效果的方法
Apr 10 Javascript
JavaScript判断变量是否为数组的方法(Array)
Feb 24 Javascript
JavaScript 中有关数组对象的方法(详解)
Aug 15 Javascript
vue.js实现表格合并示例代码
Nov 30 Javascript
浅谈javascript中执行环境(作用域)与作用域链
Dec 08 Javascript
Bootstrap table使用方法记录
Aug 23 Javascript
利用js将ajax获取到的后台数据动态加载至网页中的方法
Aug 08 Javascript
JS通过调用微信API实现微信支付功能的方法示例
Jun 29 #Javascript
详解vue数据渲染出现闪烁问题
Jun 29 #Javascript
将angular.js项目整合到.net mvc中的方法详解
Jun 29 #Javascript
详解webpack和webpack-simple中如何引入css文件
Jun 28 #Javascript
基于jQuery实现的Ajax 验证用户名唯一性实例代码
Jun 28 #jQuery
VUE利用vuex模拟实现新闻点赞功能实例
Jun 28 #Javascript
Vuex利用state保存新闻数据实例
Jun 28 #Javascript
You might like
PHP 和 HTML
2006/10/09 PHP
php发送post请求函数分享
2014/03/06 PHP
将CMYK颜色值和RGB颜色相互转换的PHP代码
2014/07/28 PHP
Ubuntu中启用php的mail()函数并解决发送邮件速度慢问题
2015/03/27 PHP
php防止CC攻击代码 php防止网页频繁刷新
2015/12/21 PHP
ThinkPHP实现更新数据实例详解(demo)
2016/06/29 PHP
Javascript typeof 用法
2008/12/28 Javascript
js 数组操作代码集锦
2009/04/28 Javascript
Prototype Class对象学习
2009/07/19 Javascript
怎样在JavaScript里写一个swing把数据插入数据库
2012/12/10 Javascript
jQuery设置和移除文本框默认值的方法
2015/03/09 Javascript
JS实现验证码倒计时的注册页面
2018/01/02 Javascript
用POSTMAN发送JSON格式的POST请求示例
2018/09/04 Javascript
vue使用v-for实现hover点击效果
2018/09/29 Javascript
使用Node.js实现一个多人游戏服务器引擎
2019/03/13 Javascript
layui原生表单验证的实例
2019/09/09 Javascript
[02:49]2014DOTA2电竞也是体育项目! 势要把荣誉带回中国!
2014/07/20 DOTA
Python打包可执行文件的方法详解
2016/09/19 Python
详解python中xlrd包的安装与处理Excel表格
2016/12/16 Python
Python实现图像的垂直投影示例
2020/01/17 Python
Python图像处理库PIL中图像格式转换的实现
2020/02/26 Python
python实现一个简单RPC框架的示例
2020/10/28 Python
Pycharm 如何一键加引号的方法步骤
2021/02/05 Python
HTML5 用动画的表现形式装载图像
2016/03/08 HTML / CSS
受欢迎的大学生自我评价
2013/12/05 职场文书
写给保洁员表扬信
2014/01/08 职场文书
毕业自我评价
2014/02/05 职场文书
协议书范本
2014/04/23 职场文书
服务标兵事迹材料
2014/05/04 职场文书
小学优秀班干部事迹材料
2014/05/25 职场文书
师德标兵事迹材料
2014/12/19 职场文书
2016年习主席讲话学习心得体会
2016/01/20 职场文书
因个人工作失误检讨书
2019/06/21 职场文书
Golang 正则匹配效率详解
2021/04/25 Golang
goland 设置project gopath的操作
2021/05/06 Golang
美国运营商 T-Mobile 以 117.83Mb/s 的速度排第一位
2022/04/21 数码科技