angular 封装http请求、解决跨域问题
第一部分:封装http请求
1.定义 ResultDataModel
export interface ResultDataModel<T> {
success: boolean;
errCode: number;
message: string;
data: T;
pageModel: PageModel;
}
export interface PageModel {
pageIndex: number;
pageSize: number;
pageCount: number;
totalNum: number;
totalPage: number;
}
2.定义 QueryModel
export class QueryModel {
items: QueryItem[];
page: QueryPage;
constructor() {
this.items = [];
this.page = new QueryPage();
}
setItems(key: string, value: string) {
this.items.push({ key: key, value: value });
}
setPage(pageIndex: number, pageSize: number, pageCount: number) {
this.page.pageIndex = pageIndex;
this.page.pageSize = pageSize;
this.page.pageCount = pageCount;
}
}
export class QueryItem {
key: string;
value: string;
constructor() {
this.key = this.value = ''
}
}
export class QueryPage {
pageIndex: number;
pageSize: number;
pageCount: number;
constructor() {
this.pageIndex = this.pageSize = this.pageCount = 0
}
}
3.书写自定义http服务,命名为vhttp
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable, of } from 'rxjs';
import { ResultDataModel } from '../model/ResultDataModel';
import { catchError } from 'rxjs/operators';
import { QueryModel } from '../model/QueryModel';
@Injectable({
providedIn: 'root'
})
export class VhttpService {
constructor(public http: HttpClient) { }
get(url: string, token?: string): Observable<ResultDataModel<any> | null> {
let _token: string = '';
if (token)
_token = token
let header: HttpHeaders = new HttpHeaders({
Authorization: _token
});
// header.set('Authorization', token); 不能这么写
return this.http.get<ResultDataModel<any>>(url, { headers: header })
.pipe(
catchError(res => {
console.log(res);
return of(null);
}),
// map((res: ResultDataModel<any>) => {
// if (!res.success) {
// console.log(res?.message)
// throwError(res?.message)
// }
// return res
// })
);
}
post(url: string, query?: QueryModel, token?: string): Observable<ResultDataModel<any> | null> {
//header
let _token: string = '';
if (token)
_token = token
let header: HttpHeaders = new HttpHeaders({
Authorization: _token
});
return this.http.post<ResultDataModel<any>>(url, query, { headers: header })
.pipe(
catchError(res => {
console.log(res);
return of(null);
}),
);
}
}
使用看看
this.vhttp.get('/api' + '/jwt/ceshi2', token)
.pipe(
map(res => {
if (!res) {
console.log('!res')
return
}
if (!res.success) {
console.log('!res?.success')
return
}
return res.data
})
)
.subscribe(res => console.log(res));
let query: QueryModel = new QueryModel();
query.setItems('sex','女');
query.setItems('id','001');
query.setPage(1,10,1);
this.vhttp.post('/api' + '/jwt/ceshi3', query, token)
.pipe(
map(res => {
if (!res) {
console.log('!res')
return
}
if (!res.success) {
console.log('!res.success')
return
}
return res.data
})
)
.subscribe(res => console.log(res));
第二部分:
1.添加配置文件 proxy.conf.json (最外层,和src同级)
{
"/api": {
"target": "http://localhost:1111",
"secure": false,
"changeOrigin": true,
"logLevel": "debug"
}
}
在 angular.json 添加 proxyConfig 配置,位置如下
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"options": {
"browserTarget": "MyFirstDemo:build",
"proxyConfig": "proxy.conf.json"
},
重新启动程序
启动项目命令:ng serve --proxy-config proxy.conf.json
尝试过:ng serve --open 也是可以的
可以在改写 package.json,使用 npm start 启动项目
"start": "ng serve --proxy-config proxy.conf.json",
会将 http://localhost:4200/api 的地址进行转换,如
http://localhost:4200/api/jwt/ceshi2
会转换为
http://localhost:1111/api/jwt/ceshi2
在输入url时,可省略 http://localhost:4200 只需要从 /api 开始,会自动补全
第三部分:
这样解决跨域并不稳妥,涉及多个api地址不好弄,最好的解决办法是取消后台跨域限制
因为这篇是angular ,这里就不纤细说明怎么取消,另附随笔: net core 添加cors,解决跨域问题
然后,写配置文件

代码如下:
export interface ApplicationConfig {
vpart: string;
}
export const CONFIG: ApplicationConfig = {
vpart: 'http://10.163.101.252:1103/api'
};
调用:
import { CONFIG } from 'src/config/api.config';
return this.vhttp.get(CONFIG.vpart+'url')
angular 封装http请求、解决跨域问题的更多相关文章
- 前端笔记之服务器&Ajax(下)数据请求&解决跨域&三级联动&session&堆栈
一.请求后端的JSON数据 JSON是前后端通信的交互格式,JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式. JSON是互联网各个后台与 ...
- axios向后端请求解决跨域问题
我要向后端的请求的url是 http://192.168.3.25/ productInfo/insert 我是先用niginx转成localhost:8081 找conf/ nginx.conf , ...
- django中解决跨域问题
-跨域问题 -浏览器的:同源策略,浏览器拒绝不是当前域域返回的数据 -ip地址和端口号都相同才是同一个域 -如何解决: -CORS:跨域资源共享 -简单请求:发一次请求 -非简单请求:非简单请求是发送 ...
- 基于 HTTP 请求拦截,快速解决跨域和代理 Mock
近几年,随着 Web 开发逐渐成熟,前后端分离的架构设计越来越被众多开发者认可,使得前端和后端可以专注各自的职能,降低沟通成本,提高开发效率. 在前后端分离的开发模式下,前端和后端工程师得以并行工作. ...
- 【手摸手,带你搭建前后端分离商城系统】02 VUE-CLI 脚手架生成基本项目,axios配置请求、解决跨域问题
[手摸手,带你搭建前后端分离商城系统]02 VUE-CLI 脚手架生成基本项目,axios配置请求.解决跨域问题. 回顾一下上一节我们学习到的内容.已经将一个 usm_admin 后台用户 表的基本增 ...
- js中ajax如何解决跨域请求
js中ajax如何解决跨域请求,在讲这个问题之前先解释几个名词 1.跨域请求 所有的浏览器都是同源策略,这个策略能保证页面脚本资源和cookie安全 ,浏览器隔离了来自不同源的请求,防上跨域不安全的操 ...
- Ajax 调用webservice 解决跨域请求和发布到服务器后本地调用成功外网失败的问题
webservice 代码 /// <summary> /// MESService 的摘要说明 /// </summary> [WebService(Namespac ...
- 前后端分离djangorestframework——解决跨域请求
跨域 什么是跨域 比如一个链接:http://www.baidu.com(端口默认是80端口), 如果再来一个链接是这样:http://api.baidu.com,这个就算是跨域了(因为域名不同) 再 ...
- XMLHttpRequest.withCredentials 解决跨域请求头无Cookie的问题
查看原文 XMLHttpRequest.withCredentials 属性是一个Boolean类型,它指示了是否该使用类似cookies,authorization headers(头部授权)或者 ...
- NODE中解决跨域请求的问题
1.Node Express 解决请求跨域请求 标签(空格分隔): 跨域 1是Access-Control-Allow-Origin 允许的域 2是Access-Control-Allow-Heade ...
随机推荐
- Mybatis-Plus 对 json 的存储使用支持
Mybatis-Plus 对 json 的存储使用支持 场景分析: 随着数据库对字段类型支持的多元化,json 类型的存储已成为多场景高频使用的字段类型.而 MySql.postgrpSql 等都支持 ...
- JavaScript:函数:函数传参传的是什么?值传递还是引用传递?
我们调用函数的时候,把实参放入到括号里进行传参,让形参接收实参的数据. 在这个过程中,形参接收的数据到底是什么,换句话说,我们传参传的到底是什么东西? 初学JS的,可能不太难理解这个问题的意义是什么? ...
- 正则爬取豆瓣Top250数据存储到CSV文件(6行代码)
利用正则爬取豆瓣TOP250电影信息 电影名字 电影年份 电影评分 评论人数 import requests import csv import re # 不算导包的话正式代码6行 存储到csv文件 ...
- cookie设置失败
有个小项目,本地测试一帆风顺,昨天发布到云服务器后就出问题了 Java端设置的Cookie,浏览器访问不到 1-2022-2-11 设置cookie代码如下 /** * 添加Cookie * @par ...
- DVWA靶场实战(三)——CSRF
DVWA靶场实战(三) 三.CSRF: 1.漏洞原理: CSRF(Cross-site request forgery),中文名叫做"跨站请求伪造",也被称作"one c ...
- [Untiy]贪吃蛇大作战(五)——游戏主界面
接着上一节: 4.AI蛇的设计 这里AI蛇大部分代码都可以参照主角的代码,我这里的实现其实还可以进行改进.基本原理就是蛇创建之后给蛇一个随机方向的单位向量,AI蛇的蛇头添加一个比蛇头大两三倍大小的碰撞 ...
- DVWA靶场实战(九)——Weak Session IDS
DVWA靶场实战(九) 九.Weak Session IDS: 1.漏洞原理: Weak Session IDS也叫做弱会话,当用户登录后,在服务器就会创造一个会话(session),叫做会话控制,接 ...
- Java 进阶P-1.1+P-1.2
用类制造对象 对象与类 对象是实体,需要被创建,可以为我们做事情 类是规范,根据类的定义来创建对象 对象=属性+服务 数据:属性或状态 操作:函数 从这些例子可以看出来 class是提供服务的,数据是 ...
- Fabric2.x中Raft共识算法核心数据结构
一.共识算法可插拔的代码体现Chain接口 Hyperledger Fabric的共识算法是可插拔的,在代码上体现为Chain接口,所有不同的共识算法均可根据Chain接口进行具体实现,目前fabri ...
- 我们从 CircleCI 安全事件获得的3个经验教训
CircleCI 作为业内最受欢迎的 CI/CD 平台提供商之一,有超过20万个 DevOps 团队使用其平台.该公司在今年1月在其官网报告了一起安全事件引起客户恐慌.在此事件中,有身份不明的恶意攻击 ...