angular cli http请求封装+拦截器配置+ 接口配置文件
内容:接口配置文件、http请求封装 、拦截器验证登录
1、接口配置文件
app.api.ts
import { Component, OnInit } from '@angular/core';
/**
* 接口配置文件
* baseurl
* urlList
*/
export class apiList implements OnInit {
baseurl: any = '';
urlList: any = {};
constructor() {
this.baseurl = 'http://127.0.0.1';
this.urlList = {
'login': {
path: '/login',
params: {
username: '',
password: ''
}
},
'getUser': {
path: '/getUser',
params: {
id: ''
}
}
}
}
ngOnInit() {}
}
上面模拟定义了两个接口
2、http请求封装
app.service.ts
import { Component, Injectable } from '@angular/core';
import { HttpClient, HttpParams } from '@angular/common/http';
import {apiList} from './app.api'; // 引入api配置文件
@Component({
providers:[apiList]
})
@Injectable()
export class selfHttp {
public restServer;
public http;
status = {
'': '请求超时,请检查网络是否断开或者链接是否正确',
"": "错误的请求。由于语法错误,该请求无法完成。",
"": "未经授权。服务器拒绝响应。",
"": "已禁止。服务器拒绝响应。",
"": "未找到。无法找到请求的位置。",
"": "方法不被允许。使用该位置不支持的请求方法进行了请求。",
"": "不可接受。服务器只生成客户端不接受的响应。",
"": "需要代理身份验证。客户端必须先使用代理对自身进行身份验证。",
"": "请求超时。等待请求的服务器超时。",
"": "冲突。由于请求中的冲突,无法完成该请求。",
"": "过期。请求页不再可用。",
"": "长度必需。未定义“内容长度”。",
"": "前提条件不满足。请求中给定的前提条件由服务器评估为 false。",
"": "请求实体太大。服务器不会接受请求,因为请求实体太大。",
"": "请求 URI 太长。服务器不会接受该请求,因为 URL 太长。",
"": "不支持的媒体类型。服务器不会接受该请求,因为媒体类型不受支持。",
"": "HTTP 状态代码 {0}",
"": "内部服务器错误。",
"": "未实现。服务器不识别该请求方法,或者服务器没有能力完成请求。",
"": "服务不可用。服务器当前不可用(过载或故障)。"
};
constructor(Http: HttpClient, public api: apiList) {
console.log(this.api.baseurl);
this.http = Http;
this.restServer = this.api.baseurl;
}
public get(url, params?: Object, cb?: Function) {
this.msg(url);
let httpParams = new HttpParams();
const vm = this;
if (params) {
for (const key in params) {
if (params[key] === false || params[key]) {
httpParams = httpParams.set(key, params[key]);
}
}
}
vm.http.get(vm.restServer + url, { params: httpParams })
.subscribe(data => {
cb(data);
},(err)=>{
console.log(this.status[err.status]);
});
}
public post(url, data?: Object, cb?: Function, options?: Object) {
this.msg(url);
const vm = this;
vm.http.post(vm.restServer + url, data, options)
.subscribe(res => {
cb(res);
}, (err) => {
console.log(err);
console.log(this.status[err.status]);
}, () => {
//...请求完成
}
);
}
public put(url, data?: Object, cb?: Function, options?: Object) {
this.msg(url);
const vm = this;
vm.http.put(vm.restServer + url, data, options)
.subscribe(res => {
cb(res);
},(err)=>{
console.log(this.status[err.status]);
});
}
public delete(url, params?: Object, cb?: Function) {
this.msg(url);
let httpParams = new HttpParams();
const vm = this;
if (params) {
for (const key in params) {
if (params[key]) {
httpParams = httpParams.set(key, params[key]);
}
}
}
vm.http.delete(vm.restServer + url, { params: httpParams })
.subscribe(data => {
cb(data);
},(err)=>{
console.log(this.status[err.status]);
});
}
public msg(url) {
console.log('/*')
console.log(' **开始请求',url)
console.log(' */')
}
}
上面定义了几个请求的函数,已经提示信息的函数。
app.module.ts注入
import {apiList} from './common/app.api';
.
.
..
providers: [httpInterceptorProviders, apiList],
example.ts
import { Component, OnInit } from '@angular/core';
import { HttpHeaders } from '@angular/common/http';
import { selfHttp } from 'src/app/common/app.service';
import {apiList} from '../common/app.api'; // 引入
@Component({
selector: 'app-article',
templateUrl: './article.component.html',
styleUrls: ['./article.component.css'],
providers:[selfHttp, apiList]
})
export class ArticleComponent implements OnInit {
httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json',
'Authorization': 'my-auth-token'
})
};
data: any;
constructor(public http: selfHttp, public api: apiList) {
console.log(this.api);
}
ngOnInit() {
this.http.post(this.api.urlList.login.path, {username: , password:, other:}, res => {
console.log('结果', res);
}, this.httpOptions);
}
}
然后访问的话就会

2、拦截器
app.myintercept.ts
/**
* 拦截器验证token
*/
import { Injectable } from '@angular/core';
import {HttpInterceptor, HttpHandler, HttpRequest, HttpEvent,} from '@angular/common/http';
import { Router } from '@angular/router';
import { Observable, } from 'rxjs';
import {apiList} from './app.api' @Injectable()
export class InterceptorService implements HttpInterceptor { constructor( public router: Router, public api: apiList) {
// localStorage.setItem('access_token', 'xxxxxxxxxxxxx')
};
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
let authReq: any;
// 实现第一次不拦截的方式:1. 指定接口不拦截 2. 判断本地localStorage
let loginUrl = this.api.baseurl + this.api.urlList['login']['path'];
if (req.url !== loginUrl) {
if (localStorage.getItem('access_token')) {
// console.log(2);
const token = localStorage.getItem('access_token');
authReq = req.clone({ setHeaders: { token } });
return next.handle(authReq);
} else {
// 未登录 == access_token
this.router.navigate(['/login']);
}
}
authReq = req.clone({ setHeaders: {} });
return next.handle(authReq);
} }
上面请求会验证是否有token,没有就跳转到登录页面。
定义拦截器收集文件

http-intercepts/index.ts
/**
* 拦截器 收集
* barrel
*/
import { HTTP_INTERCEPTORS } from '@angular/common/http';
import { InterceptorService } from '../app.myIntercept'; export const httpInterceptorProviders = [
{ provide: HTTP_INTERCEPTORS, useClass: InterceptorService, multi: true },
];
app.module.ts注入
import {httpInterceptorProviders} from 'src/app/common/http-interceptors/index'
.
.
.
.
providers: [httpInterceptorProviders, apiList],
现在如果进入页面请求,没有带token的话就会自动跳转到登录页面。
github: https://github.com/ft1107949255/BackSystem
angular cli http请求封装+拦截器配置+ 接口配置文件的更多相关文章
- Vue-admin工作整理(十六):Ajax-axios进行请求封装+拦截器
典型的工具类封装,增加拦截起来做相应的处理 user.js: import axios from './index' export const getUserInfo = ({ userId }) = ...
- 【转】AngularJs HTTP请求响应拦截器
任何时候,如果我们想要为请求添加全局功能,例如身份认证.错误处理等,在请求发送给服务器之前或服务器返回时对其进行拦截,是比较好的实现手段. angularJs通过拦截器提供了一个从全局层面进行处理的途 ...
- Struts2 拦截器配置以及实现
@(Java ThirdParty)[Struts|Interceptor] Struts2 拦截器配置以及实现 Struts2的拦截器应用于Action,可以在执行Action的方法之前,之后或者两 ...
- Spring 拦截器配置
Spring interceptor拦截器配置 Spring mvc的拦截器是通过handlerinterceptor来实现的 实现方式: 1.自定义一个类实现Spring的handlerinterc ...
- Struts2拦截器配置
1. 理解拦截器 1.1. 什么是拦截器: 拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作.拦截是AO ...
- Struts2-整理笔记(五)拦截器、拦截器配置
拦截器(Interceptor) 拦截器是Struts2最强大的特性之一,它是一种可以让用户在Action执行之前和Result执行之后进行一些功能处理的机制. 拦截器的优点 简化了Action的实现 ...
- SpringBoot整合Mybatis完整详细版二:注册、登录、拦截器配置
接着上个章节来,上章节搭建好框架,并且测试也在页面取到数据.接下来实现web端,实现前后端交互,在前台进行注册登录以及后端拦截器配置.实现简单的未登录拦截跳转到登录页面 上一节传送门:SpringBo ...
- Springboot中SpringMvc拦截器配置与应用(实战)
一.什么是拦截器,及其作用 拦截器(Interceptor): 用于在某个方法被访问之前进行拦截,然后在方法执行之前或之后加入某些操作,其实就是AOP的一种实现策略.它通过动态拦截Action调用的对 ...
- 转载 - Struts2拦截器配置
出处:http://blog.csdn.net/axin66ok/article/details/7321430 目录(?)[-] 理解拦截器 1 什么是拦截器 2 拦截器的实现原理 拦截器的配置 使 ...
随机推荐
- Java修炼——暂停线程的四个方法
线程的获取方法:Thread.currentThread() 后面可以加上获取线程的名字 .getName() 这样就成功获取到了线程的名字. Sleep会导致当前线程休眠一定 ...
- C++与数据结构课程设计---定票咨询系统
订票咨询管理系统 设计编制一个订票管理系统,考虑旅客不同的要求.例如,选择不同的交通工具,希望在旅途中的时间尽可能地短,期望旅费尽可能省,或要求中转次数最少等.为旅客提供两种或三种最优决策.车票基本信 ...
- 新手学习FFmpeg - 如何编写Kubernetes资源文件
Kubernetes API的使用方式 Kubernetes API属于声明式API编程, 它和常用的命令式编程有一些区别. 通俗的说,命令式编程是第一人称,我要做什么,我要怎么做. 操作系统最喜欢这 ...
- Java_百钱买百鸡
题目:公鸡3文钱,母鸡2文钱,3只小鸡1文钱,百钱买百鸡,求多少公鸡,母鸡,小鸡? public class Work6{ public static void main(String[] args) ...
- NodeJS3-3基础API----event(事件触发器)
1.基础(on) // 如果像对象享有事件能力就要集成EventEmitter const EventEmitter = require('events') //集成EventEmitter类 cla ...
- 《Java基础知识》Java数据类型以及变量的定义
Java 是一种强类型的语言,声明变量时必须指明数据类型.变量(variable)的值占据一定的内存空间.不同类型的变量占据不同的大小. Java中共有8种基本数据类型,包括4 种整型.2 种浮点型. ...
- Linux服务器可以ping,但是telnet端口超时,网站wget超时,访问超时的解决办法
最近无法通过SSH连接Linux服务器,访问该服务器上的HTTP服务也出现异常.可以ping,但是telnet端口超时,网站wget超时,访问超时. 最后排查是内核配置问题 原来是 net.ipv4. ...
- public class 和 class的区别
问题:public class 和 class的区别 public class 公共类 class 普通类 一个java源文件中可以有多个class,但是最多只能有一个public class 可以没 ...
- 添加junit和spring-test还是用不了@Test和@RunWith(SpringJUnit4ClassRunner.class)注解
pom.xml依赖如下 <!-- spring 单元测试组件包 --> <dependency> <groupId>org.springframework</ ...
- JS---案例:简单轮播图
案例:简单轮播图 div叫盒子,里面包了2个小盒子,一个是inner,一个是square inner的div是放ul,里面有li,a,和图片 square的div里面放span,是轮播图的小点 < ...