angular开发中对请求数据层的封装
一、本章节仅仅是对angular4项目开发中数据请求封装到model中
仅仅是在项目angular4项目部署结构的基础上扩展了,根据
javaweb项目开发分层来说命名service可能会好点,但是为了不与angular4中本身就有的服务想冲突,本人取名为model与数据层打交道的
二、项目结构
三、本章节使用到的技术点
- 1、封装了带头部信息的(可能出于安全考虑
CSRF攻击类的,或者python-web开发就必须要带tockend头信息) - 2、简单的封装了
get和post请求的基础模型 - 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开发中对请求数据层的封装
注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权
angular开发中对请求数据层的封装的更多相关文章
- angular开发中的两大问题
一.在我们的angular开发中,会请求数据但轮播图等...在请求过数据后他的事件和方法将不再执行: 看我们的解决方案一: app.controller("text",functi ...
- python web开发-flask访问请求数据request
Request对象在web应用的开发中是一个非常重要的对象,主要用来获取用户发来的请求数据. 常用属性参考:http://docs.jinkan.org/docs/flask/api.html#fla ...
- struts中的请求数据自动封装
Struts 2框架会将表单的参数以同名的方式设置给对应Action的属性中.该工作主要是由Parameters拦截器做的.而该拦截器中已经自动的实现了String到基本数据类型之间的转换工作.在st ...
- .Net中EF通用数据层小结
增删改查: using System; using System.Collections.Generic; using System.Data; using System.Data.Entity; u ...
- 接口测试中读取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 ('小') ...
- Struts2 请求数据的自动封装 及 自定义转换器类
请求数据自动封装: 实现原理:使用了参数拦截器.struts-default.xml中 <interceptor name="params" class="com. ...
- 瞎j8封装第二版之数据层的封装
看了以前写的代码,对就是下面这个 手把手封装数据层之DataUtil数据库操作的封装 觉得以前写的代码好烂啊!!!,重新理了一下思路,写得更规范和简练,应该效率也会高很多,用了一下下午写的连接池(半废 ...
- Hybrid混合开发中schema协议的使用与封装
混合开发中JS与APP通信的实现原理: JS通过schema协议,传递参数和全局回调函数给APP端 APP执行完(如微信扫一扫)后,调用协议中传入的回调函数,在前端执行回调处理. 默认写法: < ...
- react-native中的请求数据
很多移动应用都需要从远程地址中获取数据或资源.你可能需要给某个 REST API 发起 POST 请求以提交用户数据,又或者可能仅仅需要从某个服务器上获取一些静态内容. 使用 Fetch React ...
随机推荐
- 树形dp入门(poj 2342 Anniversary party)
题意: 某公司要举办一次晚会,但是为了使得晚会的气氛更加活跃,每个参加晚会的人都不希望在晚会中见到他的直接上司,现在已知每个人的活跃指数和上司关系(当然不可能存在环),求邀请哪些人(多少人)来能使得晚 ...
- 【线段树】Mayor's posters
[poj2528]Mayor's posters Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 66154 Accept ...
- 【线性基】hdu3949 XOR
给你n个数,问你将它们取任意多个异或起来以后,所能得到的第K小值? 求出线性基来以后,化成简化线性基,然后把K二进制拆分,第i位是1就取上第i小的简化线性基即可.注意:倘若原本的n个数两两线性无关,也 ...
- 【LIS】【递推】Gym - 101246H - ``North-East''
x坐标排序,y坐标当权值,同一个x坐标的,y从大到小排. 求f(i)表示以i结尾的LIS以后,从后向前枚举,不断更新一个max数组,max(i)代表最长上升子序列为i时,当前的 结尾的最大值是多少. ...
- 【凸包】【三分】Gym - 101309D - Dome of Circus
容易发现,圆锥体积和点的具体x.y坐标无关,只与其到z轴的距离sqrt(x*x+y*y)有关. 于是将这些三维的点都投射到二维的xOy平面的第二象限(sqrt(x*x+y*y),z),求个上凸壳,然后 ...
- Z-Stack协议栈网络号与信道号的设置
1.网络号设置 默认是:-DZDAPP_CONFIG_PAN_ID=0xFFFF 代表的是随机选择一个网络号,并加入此网络,可以将0xffff改成4位数字,如图所示. 2.信道号的设置 这个地方在网络 ...
- 手机在线更新系统MySQL数据库服务器参数优化mycnf,16G内存8核CPU,
业务场景: 后台支持手机在线更新系统,db服务器内存16G,8核,dell的pc服务器. qps: 200个左右 tps: 1个左右 一分钟50几个 sort_buffer_size = 32M 大了 ...
- POJ 2019 Cornfields (二维RMQ)
Cornfields Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 4911 Accepted: 2392 Descri ...
- js模板引擎-art-template常用
art-template javascript 模板引擎 分为原生语法和简洁语法,本文主要是讲简洁语法 基础数据渲染 输出HTML 流程控制 遍历 调用自定义函数方法 子模板引入 基础数据渲染 一.引 ...
- Oracle session active 和 inactive 状态 说明
Oracle session active 和 inactive 状态 说明 原创 2011年06月12日 13:08:00 标签: session / oracle / database / ser ...