2016-04-21 9 views
0

У меня есть служба HTTP, которая просто запрашивает данные с сервера и возвращает результат. Во время разработки моего проекта на сервере могут возникать различные ошибки, и он не всегда возвращает JSON, поэтому мне нужно получить тело ответа в виде строки.Как получить тело ответа в виде строки?

У меня есть этот кусок кода, который запрашивает данные:

getVersions(entryURLName: string) { 
    return this._http.get('/ajax/entry/' + entryURLName + '/versions') 
     .map((response: Response) => <Version[]>response.json()) 
     .do(data => console.log(data)) 
     .catch(this.handleError); 
} 

И в обработчик ошибок у меня есть это:

handleError(error: Response) { 
    console.log(error); 

    var errorMessage; 
    try { 
     let errorObj = error.json().error; 
     errorMessage = errorObj; 
    } catch (e) { 
     errorMessage = error.text(); 
    } 

    return Observable.throw(errorMessage); 
} 

Я прочитал в documentation что Response объект имеет метод text() который возвращает тело как строку, но на самом деле переменная error здесь не имеет этого метода. Может быть, я делаю что-то не так?

Update # 1:

Вот что console.log(error); отпечатки (Safari): enter image description here

+0

Что такое 'console.log (ошибка);' print? –

+0

@ThierryTemplier Обновлен мой вопрос. Вот скриншот из консоли Safari. – Randex

ответ

1

Я бы использовать заголовок Content-Type знать, чтобы извлечь данные из полезной нагрузки:

getVersions(entryURLName: string) { 
    return this._http.get('/ajax/entry/' + entryURLName + '/versions') 
    .map((response: Response) => { 
    if (response.headers['Content-Type']==='application/json') { 
     return <Version[]>response.json(); 
    } else { 
     return response.text(); 
    } 
    }) 
    .do(data => console.log(data)) 
    .catch(this.handleError); 
} 

То же самое для обратного вызова ошибки.

В вашем случае, я думаю, что есть проблема в вашем обратном вызове map, и он выдает ошибку, которую вы получаете в обратном вызове catch (вместо самого ответа).

+0

Спасибо! Не думал, что 'map' вызывает ошибку ... – Randex

Смежные вопросы