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

代码地址如下:
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大师代发,拒绝转载,转载需要作者授权

posted on   demo例子集  阅读(445)  评论(0编辑  收藏  举报

(评论功能已被禁用)
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示