【问题标题】:Angular 2 universal http requestAngular 2 通用 http 请求
【发布时间】:2017-11-29 11:02:06
【问题描述】:

我正在寻找 Angular 的通用 http 请求,例如在 vanilla JS 中,您可以将请求方法作为输入参数('POST'、'GET'...)。

我尝试使用开关盒,但效果不佳。

Request(UserDetails, endpoint, method): Observable<Comment[]> {
        const bodyString = UserDetails;
        const headers = new Headers({ 'Content-Type': 'application/json'});
        const options = new RequestOptions({headers: headers});
        const meth = method
        console.log(meth)
        let request;

        switch(meth) {
            case 'post': {
                request = this.http.post;
                console.log(request)        
                break;
            }
            case 'get': {
                request = this.http.post;
                break;
            }
            case 'patch': {
                request = this.http.patch;
                break;
            }
            case 'delete': {
                request = this.http.delete;
                break;
            }
        };
        return request(endpoint, bodyString, options)
            .map((res: Response) => res.json())
            .catch((error: any) =>  Observable.throw(error.json() || 'server 
error'));
    }

【问题讨论】:

  • 需要更多字符

标签: angular typescript xmlhttprequest switch-statement


【解决方案1】:

使用http.request 方法:

Request(UserDetails, endpoint, method): Observable<Comment[]> {
    const bodyString = UserDetails;
    const headers = new Headers({ 'Content-Type': 'application/json'});
    //const options = new RequestOptions({headers: headers});
    const request = new Request({method: method,
                                 headers: headers
                               });

    return this.http.request(request, bodyString)
        .map((res: Response) => res.json())
        .catch((error: any) =>  Observable.throw(error.json() || 'serveerror'));
}

欲了解更多信息,请参阅Angular API Reference - http.request

【讨论】:

  • 谢谢,但它仍然无法正常工作。它收到了这条消息:argument of type '{method: any; headers: any }' s not assignable to parameter of type 'Request Args'
【解决方案2】:

你也必须给出参数:

switch(meth) {
            case 'post': {
                request = this.http.post(endpoint, bodyString, options);   
                break;
            }
            case 'get': {
                request = this.http.post(endpoint, bodyString, options);
                break;
            }
        return request
            .map((res: Response) => res.json())
            .catch((error: any) =>  Observable.throw(error.json() || 'server error'));

【讨论】:

  • 但我仍在寻找更优雅的解决方案:)
  • 他只是想要一个对它的引用,它稍后会在返回承诺中被调用。
【解决方案3】:

这样的?

// Make sure to validate acceptable values
const meth = "post";

request = this.http[meth]( ...args );

这是动态访问属性的对象括号表示法

【讨论】:

    猜你喜欢
    • 2016-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-09
    • 1970-01-01
    • 2017-03-24
    相关资源
    最近更新 更多