在Angular 2中,可以使用Angular的HttpClient模块来发送HTTP请求。要将baseURL前置到POST请求上,可以使用拦截器(interceptor)来修改请求的URL。
首先,创建一个新的拦截器,用于修改请求的URL。在拦截器中,将baseURL前置到请求的URL上。
import { Injectable } from '@angular/core';
import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http';
import { Observable } from 'rxjs';
@Injectable()
export class BaseUrlInterceptor implements HttpInterceptor {
private baseURL = 'http://example.com/api'; // 假设这是baseURL
intercept(request: HttpRequest, next: HttpHandler): Observable> {
const modifiedRequest = request.clone({ url: this.baseURL + request.url });
return next.handle(modifiedRequest);
}
}
然后,在你的Angular模块中注册该拦截器。在providers数组中,将BaseUrlInterceptor添加为HTTP_INTERCEPTORS提供的多个拦截器之一。
import { NgModule } from '@angular/core';
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
import { BaseUrlInterceptor } from './base-url.interceptor';
@NgModule({
imports: [HttpClientModule],
providers: [
{ provide: HTTP_INTERCEPTORS, useClass: BaseUrlInterceptor, multi: true }
]
})
export class AppModule { }
现在,每次发送POST请求时,拦截器都会将baseURL前置到URL上,以实现在POST请求中使用baseURL的效果。
import { Component } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Component({
selector: 'app-root',
template: ``
})
export class AppComponent {
constructor(private http: HttpClient) { }
sendPostRequest() {
this.http.post('/some-endpoint', { data: 'Hello World' }).subscribe(response => {
console.log(response);
});
}
}
在上面的示例中,我们使用HttpClient发送了一个POST请求到/some-endpoint
。由于拦截器的作用,实际请求的URL将变为http://example.com/api/some-endpoint
。