第一部分:封装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')

  

最新文章

  1. SQL SERVER 9003错误解决方法 只适用于SQL2000
  2. C/C++内存分配
  3. 【emWin】例程四:显示文本
  4. Pycharm快捷方式
  5. A session of Log Collect, Retrieval and Analysis using ELK Stack
  6. motto1
  7. HDU 1043 &amp; POJ 1077 Eight(康托展开+BFS+预处理)
  8. Oracle笔记 十、PL/SQL存储过程
  9. python二叉树递归算法之后序遍历,前序遍历,中序遍历
  10. Android中BaseAdapter的基本用法和加载自定义布局!
  11. 为编写网络爬虫程序安装Python3.5
  12. Nginx 常用配置整理
  13. Jenkins构建本地项目到服务器上自动部署的方法
  14. spark在yarn-cluster模式,错误查找方法
  15. 关于redis的使用
  16. JavaScript引用类型之Array类型API详解
  17. 小数点保留n位有效数字
  18. IDEA常用快捷键总结
  19. no-sql数据库之redis
  20. 会话session

热门文章

  1. kestrel网络编程--开发Fiddler
  2. 第四篇:前端之BOM与DOM
  3. uniapp 微信小程序自己封装头部标题栏
  4. 云知声: 基于 JuiceFS 的超算平台存储实践
  5. 国产paozhu c++ web framework 正式版发布
  6. Netty-BIO、NIO、AIO、零拷贝-2
  7. 12、synchronized和Lock的使用
  8. 三台服务器使用docker搭建redis一主二从三哨兵,概念-搭建-整合springboot
  9. 使用Jiralert实现AlertManager告警对接Jira
  10. 腾讯云服务器CentOS 7.6安装基本中间件