如何在没有冗余头配置的情况下创建Aurelia服务?

如何在没有冗余头配置的情况下创建Aurelia服务?,aurelia,Aurelia,我目前正在进行一个使用Aurelia作为前端框架的项目,我想知道是否有一种更雄辩、更少冗余的方法来设置API服务中的请求头。下面是一个例子 在这个Post服务中,我创建了一个configureHeaders方法,我在每次API调用之前调用该方法,因为否则,我会遇到web令牌已更改但请求标头未更新的情况。虽然创建这个configureHeaders方法是一个功能性的解决方法,但我必须为我的每项服务创建它,这感觉非常冗余 是否有一种方法可以在应用程序范围内配置请求标头,这样我就不必为每个服务创建co

我目前正在进行一个使用Aurelia作为前端框架的项目,我想知道是否有一种更雄辩、更少冗余的方法来设置API服务中的请求头。下面是一个例子

在这个Post服务中,我创建了一个configureHeaders方法,我在每次API调用之前调用该方法,因为否则,我会遇到web令牌已更改但请求标头未更新的情况。虽然创建这个configureHeaders方法是一个功能性的解决方法,但我必须为我的每项服务创建它,这感觉非常冗余

是否有一种方法可以在应用程序范围内配置请求标头,这样我就不必为每个服务创建configureHeaders方法并为每个请求调用它

import {inject} from 'aurelia-framework';
import {HttpClient} from 'aurelia-http-client';

import environment from 'environment';

@inject(HttpClient)
export class Post {

    constructor(http) {
        this.http = http;
    }

    configureHeaders() {
        this.token = window.localStorage.getItem('token') || null;
        this.http = this.http
          .configure(x => {
            x.withBaseUrl(environment.serverBaseURL);
            x.withHeader('Authorization', `Bearer ${this.token}`);
          });       
    }

    getPosts() {
        this.configureHeaders();

        return this.http.get('post')    
        .then(posts => {
            return JSON.parse(posts.response);
        });
    }

}

正如R.Richards所评论的,Aurelia的HttpClient拦截器是您所追求的

下面是一个类示例-与使用匿名函数的对象相反

一,。声明拦截器

import {Interceptor, HttpResponseMessage, RequestMessage} from 'aurelia-http-client'

export class CustomInterceptor implements Interceptor {
  request(request: RequestMessage): RequestMessage {
    //Do request interceptor here
    return request;
  }
  response(response: HttpResponseMessage): HttpResponseMessage{
    //Do response interception here
    return response;
  }
}
二,。将拦截器注册为main.js中默认http客户端的一部分

import {CustomInterceptor} from 'path/to/custom-interceptor'

...
...

http.configure(config => {
  //config stuff here
).withInterceptor(new CustomInterceptor())

这应该适合你的口才

Aurelia有HTTP的概念。尽管如此,文档并没有详细介绍如何使用它。拦截器应该允许您集中设置标题。@R.Richards非常好,非常感谢。