2016-03-18 5 views
22

Я хотел бы скопировать ответ REST в blob, но я не могу это сделать, потому что blob() и arrayBuffer() еще не были реализованы в объекте Response. Тело ответа является частной переменной.Как я могу получить доступ к телу ответа Angular 2 http без преобразования его в строку или json?

... 
return this.http.get(url, {params: params, headers: headers}) 
    .map(res => { 
     // can't access _body because it is private 
     // no method appears to exist to get to the _body without modification    
     new Blob([res._body], {type: res.headers.get('Content-Type')}); 
    }) 
    .catch(this.log); 
... 

Есть ли решение, которое я смогу использовать до тех пор, пока эти методы не будут реализованы?

ответ

46

Там это гораздо более простое решение, чтобы получить доступ к телу в виде строки, которые я не видел документированы где:

let body = res.text() 
+3

Ничего себе! Это решение фактически позволяет npm компилировать мои TS тоже! Где вы это нашли? –

+1

Было много проб и ошибок, поэтому я не могу вспомнить, что я боюсь. – StudioLE

1

Я не вижу никаких других решений, прежде чем следующий PR слито:

В то время как у вас есть ошибки компиляции, поле может быть использовано во время выполнения ...

6

Поскольку я нашел этот вопрос во время работы с той же проблемой (и документация Angular не обновляется на сегодняшний день), вы можете использовать:

let blob = new Blob([response.arrayBuffer()], { type: contentType }); 

Другой обходной путь, если вы по какой-то причине находятся на старой версии Угловое 2 является:

let blob = new Blob([(<any> response)._body], { type: contentType }); 
2

set responseType of requestoptions. Это сделает метод response.blob().

 let headers = this.getAuthorizationHeader(); 
    headers.append("Accept", "application/octet-stream"); 
    return this.http 
     .get(url, new RequestOptions({ headers: headers, responseType: ResponseContentType.Blob })) 
     .map((res: Response): Blob => { 
      return res.ok ? res.blob() : undefined; 
     }) 
+0

Дополнительная информация о новых возможностях: http://restlet.com/company/blog/2016/08/29/whats-new-in-the-http-module-of-angular-2/, не забудьте использовать подписку использовать результат – bleuscyther

8

Addon to @StudioLE. Вы можете использовать метод json() для возврата данных как json.

let body = res.json() 
+1

Это абсолютно то, что нужно использовать. В ответе 'error' вы можете сделать' error.json() ', и фактически возвращенные данные из API будут доступны в шаблоне. – Rexford

+0

Dangit, я забыл использовать '.json()' lol спасибо за этот ответ, к счастью, я просто ударил головой в течение нескольких минут. –

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

  • Нет связанных вопросов^_^