代码地址如下:
http://www.demodashi.com/demo/11481.html

一、本章节仅仅是对angular4项目开发中数据请求封装到model

仅仅是在项目angular4项目部署结构的基础上扩展了,根据javaweb项目开发分层来说命名service可能会好点,但是为了不与angular4中本身就有的服务想冲突,本人取名为model与数据层打交道的

二、项目结构

三、本章节使用到的技术点

  • 1、封装了带头部信息的(可能出于安全考虑CSRF攻击类的,或者python-web开发就必须要带tockend头信息)
  • 2、简单的封装了getpost请求的基础模型
  • 3、把基础模型的类注入到项目开发中的接口模型中
  • 4、form表单提交数据仅仅是利用的模板局部变量的方式获取输入框的值
  • 5、使用代理解决开发过程中跨域的问题
  • 6、使用express搭建一个后端服务器
  • 7、node服务器对mySQL数据库的查询与增加数据

四、重要代码描述

  • 1、基础模型代码的封装

    import { Injectable } from '@angular/core';
    import { Http, Headers } from '@angular/http';
    import { Observable } from 'rxjs/Observable';
    import 'rxjs/Rx'; @Injectable()
    export class ServiceBaseService {
    constructor(private http: Http) { }
    /**
    * @param {string} url地址
    * @param {any} [options]可选提交的参数
    * @param {any} [header]可选设置的头信息
    * @memberof ServiceBaseService
    * @title: 封装一个get请求的基础类
    */
    getData(url: string, options?: any, myheaders?: any): Observable<any> {
    // 配置请求头
    const myHeaders: Headers = new Headers();
    // tslint:disable-next-line:forin
    for (const key in myheaders) {
    myHeaders.append(key, myheaders[key]);
    };
    url += (url.indexOf('?') < 0 ? '?' : '&') + this.param(options);
    return this.http.get(url, { headers: myHeaders }).map(res => res.json());
    } /**
    * @param url地址
    * @param options提交的数据
    * @param myheaders可选参数设置头
    * @title:封装一个post请求数据的
    */
    postData(url: string, options: any, myheaders?: any): Observable<any> {
    const myHeaders: Headers = new Headers();
    myHeaders.append('Content-Type', 'application/json');
    // tslint:disable-next-line:forin
    for (const key in myheaders) {
    myHeaders.append(key, myheaders[key]);
    };
    return this.http.post(url, options, { headers: myHeaders });
    }
    /**
    * @param {any} data
    * @returns
    * @memberof ServiceBaseService
    * @title:封装一个序列化get请求的参数的方法
    */
    param(data): string {
    let url = '';
    // tslint:disable-next-line:forin
    for (const k in data) {
    const value = data[k] !== undefined ? data[k] : '';
    url += `&${k}=${encodeURIComponent(value)}`;
    }
    return url ? url.substring(1) : '';
    }
    }
  • 2、项目的根目录中创建proxy.conf.json解决跨域问题

    {
    "/wiseoper/**": {
    "target": "http://localhost:3000",
    "secure": false
    }
    }
  • 3、关于代理解决跨域的注意点请参考

  • 4、关于get请求获取数据的模型

    import { Injectable } from '@angular/core';
    import { ServiceBaseService } from 'app/model/service-base.service'; @Injectable()
    export class GetServiceService { constructor(private serviceBase: ServiceBaseService) { }
    // 获取数据
    getData() {
    const url = '/wiseoper/';
    return this.serviceBase.getData(url, {name: 'hello', age: 20}, {QQ: '332904234'});
    }
    }
  • 5、在组件的component.ts中直接调用模型中的方法就可以

    // 直接调用get请求数据的方法
    getDate(): void {
    this.getService.getData().subscribe(data => {
    console.log(data);
    });
    }
  • 6、可以从控制台上查看给请求头添加的内容

五、关于post请问的封装

  • 1、服务器代码

    router.post("/wiseoper/register",(req,res)=>{
    //如果是post提交数据就用req.body接收
    console.log(req.body);
    db("insert into cms_user(username,password) values(?,?)",[req.body.username,req.body.password],(err,data)=>{
    console.log(err);
    if (err){
    res.json({
    code:0,
    info:"注册失败"
    });
    }
    console.log(data);
    if (data){
    res.json({
    code:1,
    info:"注册成功"
    });
    }
    })
    });
  • 2、angular4中对post请求的封装

    /**
    * @param url地址
    * @param options提交的数据
    * @param myheaders可选参数设置头
    * @title:封装一个post请求数据的
    */
    postData(url: string, options: any, myheaders?: any): Observable<any> {
    const myHeaders: Headers = new Headers();
    myHeaders.append('Content-Type', 'application/json');
    // tslint:disable-next-line:forin
    for (const key in myheaders) {
    myHeaders.append(key, myheaders[key]);
    };
    return this.http.post(url, options, { headers: myHeaders });
    }

angular开发中对请求数据层的封装

代码地址如下:
http://www.demodashi.com/demo/11481.html

注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权

angular开发中对请求数据层的封装的更多相关文章

  1. angular开发中的两大问题

    一.在我们的angular开发中,会请求数据但轮播图等...在请求过数据后他的事件和方法将不再执行: 看我们的解决方案一: app.controller("text",functi ...

  2. python web开发-flask访问请求数据request

    Request对象在web应用的开发中是一个非常重要的对象,主要用来获取用户发来的请求数据. 常用属性参考:http://docs.jinkan.org/docs/flask/api.html#fla ...

  3. struts中的请求数据自动封装

    Struts 2框架会将表单的参数以同名的方式设置给对应Action的属性中.该工作主要是由Parameters拦截器做的.而该拦截器中已经自动的实现了String到基本数据类型之间的转换工作.在st ...

  4. .Net中EF通用数据层小结

    增删改查: using System; using System.Collections.Generic; using System.Data; using System.Data.Entity; u ...

  5. 接口测试中读取excel中的请求数据含有中文问题,UnicodeEncodeError: 'latin-1' codec can't encode character '\u5c0f' in position

    错误信息:UnicodeEncodeError: 'latin-1' codec can't encode character '\u5c0f' in position 31: Body ('小') ...

  6. Struts2 请求数据的自动封装 及 自定义转换器类

    请求数据自动封装: 实现原理:使用了参数拦截器.struts-default.xml中 <interceptor name="params" class="com. ...

  7. 瞎j8封装第二版之数据层的封装

    看了以前写的代码,对就是下面这个 手把手封装数据层之DataUtil数据库操作的封装 觉得以前写的代码好烂啊!!!,重新理了一下思路,写得更规范和简练,应该效率也会高很多,用了一下下午写的连接池(半废 ...

  8. Hybrid混合开发中schema协议的使用与封装

    混合开发中JS与APP通信的实现原理: JS通过schema协议,传递参数和全局回调函数给APP端 APP执行完(如微信扫一扫)后,调用协议中传入的回调函数,在前端执行回调处理. 默认写法: < ...

  9. react-native中的请求数据

    很多移动应用都需要从远程地址中获取数据或资源.你可能需要给某个 REST API 发起 POST 请求以提交用户数据,又或者可能仅仅需要从某个服务器上获取一些静态内容. 使用 Fetch React ...

随机推荐

  1. Python 头文件和常用函数

    #coding=utf-8 """ @version: ?? @author: Donny @Mail: wdm666666@gmail.com @license: La ...

  2. BZOJ 2049 [Sdoi2008]Cave 洞穴勘测(动态树)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2049 [题目大意] 要求支持树的断边和连边,以及连接查询 [题解] LCT练习题 [代 ...

  3. 【递推】【DFS】【枚举】Gym - 101246C - Explode 'Em All

    网格里放了一些石块,一个炸弹能炸开其所在的行和列.问炸光石块至少要几个炸弹. 枚举不炸开的行数,则可以得出还要炸开几列. 为了不让复杂度爆炸,需要两个优化. 先是递推预处理出f(i)表示i的二进制位中 ...

  4. 21点游戏java实现

    21点的基本知识 21点是世界上比较流行的扑克游戏项目 除掉大小王的一副扑克牌,共计52张牌 21点不区分花色,其中A----10均代表扑克牌本身的点数J Q K代表10点 区分庄家和闲家,其中闲家可 ...

  5. Codeforces Round #344 (Div. 2) A. Interview 水题

    A. Interview 题目连接: http://www.codeforces.com/contest/631/problem/A Description Blake is a CEO of a l ...

  6. 8VC Venture Cup 2016 - Final Round (Div. 2 Edition) C. XOR Equation 数学

    C. XOR Equation 题目连接: http://www.codeforces.com/contest/635/problem/C Description Two positive integ ...

  7. GIT使用(自用)

    1.远程分支就是本地分支push到服务器上的时候产生的.比如master就是一个最典型的远程分支(默认). 1 $: git push origin master 除了master之外,我们还可以随便 ...

  8. HDU 4631 Sad Love Story (2013多校3 1011题 平面最近点对+爆搞)

    Sad Love Story Time Limit: 40000/20000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others ...

  9. SQL Server--CheckPoint

    http://www.cnblogs.com/TeyGao/category/526201.html

  10. 在 Ubuntu 14.04 上安装 Ubuntu Tweak 0.8.8

    转自:http://linux.cn/article-3335-1.html 关于 Ubuntu Tweak,Ubuntu 老用户再熟悉不过了,Ubuntu tweak 相当于 windows 的优化 ...