angular 拦截器

栏目: JavaScript · 发布时间: 7年前

内容简介:前台需要请求后台的所以依照不写重复代码的原则,一种方法我们可以定义一个公共变量,另一种就是可以定义一个拦截器,然后在请求API之前,为路径添加公共部分,再去请求。angular中要定义拦截器,需要实现

需求描述

前台需要请求后台的 API ,然后在请求时 API 的样式均有如下格式:

/api/...

所以依照不写重复代码的原则,一种方法我们可以定义一个公共变量,另一种就是可以定义一个拦截器,然后在请求API之前,为路径添加公共部分,再去请求。

angular中的拦截器

angular中要定义拦截器,需要实现 HttpInterceptor 接口,然后实现 intercept() 方法。

@Injectable()
export class MyInterceptor implements HttpInterceptor {
    intercept(req: HttpRequest<any>, next: HttpHandler) {
        return next.handle(req);
    }
}

该方法接受了两个参数。第一个我们通过名字一下子就看出来这个是什么意思:这是一个http请求,他是我们主要操作的对象。另一个参数是next,他表示拦截器链表中的 下一个 拦截器。也就是说他会将 http请求 传递给下一个拦截器。这个链表的最后一项就是后端处理器,所以最后用过 next 将请求传给后台处理。

然后我们的需求是在请求之前修改请求路径,所以需要这么写:

intercept(req: HttpRequest<any>, next: HttpHandler) {
    const cloneRequest = req.clone({
        url: `api/${req.url}`       // 添加默认api访问路径
    });
    return next.handle(cloneRequest);
}

在angular中,如果想要修改请求,就需要调用它的 clone 方法,然后修改这个克隆体,最后将克隆体通过 next 对象,传递给下一个对象,或传给后台。

这里我只对 url 进行了修改,当然还可以处理请求中的其他方面。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Linux/UNIX系统编程手册

Linux/UNIX系统编程手册

Michael Kerrisk / 孙剑 许从年 董健、孙余强 郭光伟 陈舸 / 人民邮电出版社 / 2014-1 / 158

《linux/unix系统编程手册(上、下册)》是介绍linux与unix编程接口的权威著作。linux编程资深专家michael kerrisk在书中详细描述了linux/unix系统编程所涉及的系统调用和库函数,并辅之以全面而清晰的代码示例。《linux/unix系统编程手册(上、下册)》涵盖了逾500个系统调用及库函数,并给出逾200个程序示例,另含88张表格和115幅示意图。 《li......一起来看看 《Linux/UNIX系统编程手册》 这本书的介绍吧!

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具