[ ] Regression (a behavior that used to work and stopped working in a new release)
[x] Bug report <!-- Please search GitHub for a similar issue or PR before submitting -->
[ ] Feature request
[ ] Documentation issue or request
[ ] Support request => Please do not submit support request here, instead see https://github.com/angular/angular/blob/master/CONTRIBUTING.md#question
HttpClientã¡ãœããã«å¿çã¿ã€ããèšå®ããããšã¯ã§ããŸããã
const options = {headers: headers, params: params, responseType: 'text'};
return this.http.get(url, options).share();
ãšã©ãŒã衚瀺ãããŸã
Types of property 'responseType' are incompatible.
Type 'string' is not assignable to type '"json"'.
å¿çã¿ã€ãã¯æ¬¡ã®ããã«ãšã¯ã¹ããŒãããå¿ èŠããããŸãã
export type ResponseType = 'arraybuffer' | 'blob' | 'json' | 'text';;
ãããŠããã®ã¿ã€ãã䜿çšããŠèšå®ããããšãã§ããŸãã ãã以å€ã®å Žåãã¿ã€ãã¯å€æŽã§ããŸããã
AngularããŒãžã§ã³ïŒ4.1.1ããã³5.0.0-beta.2ã§ããŸã ååš
ããã«èŠãããããã«ïŒ https ïŒ//github.com/angular/angular/blob/master/packages/common/http/src/client.ts
åé¿çïŒ
const options: {
headers?: HttpHeaders,
observe?: 'body',
params?: HttpParams,
reportProgress?: boolean,
responseType: 'text',
withCredentials?: boolean
} = {
headers: headers,
params: params,
responseType: 'text'
};
@zaiddabaeençŸåšãããã¯ä»æ§ã«ãããã®ã§ãã Typescriptã¯ã get()
ã®æ£ããæ»ãã¿ã€ããéžæããããã«ã observe
ãšresponseType
ã®å€ãéçã«æšæž¬ã§ããå¿
èŠããããŸãã äžé©åã«å
¥åãããoptions
ãªããžã§ã¯ããæž¡ããšãæ£ãããªã¿ãŒã³ã¿ã€ããæšæž¬ã§ããŸããã
å¥ã®åé¿çã¯æ¬¡ã®ãšããã§ãã
const options = {headers, params, responseType: 'text' as 'text'};
return this.http.get(url, options).share();
ç§ã¯ç解ããŠããŸãããããã¯éçºè ã«ãšã£ãŠçŽæçã§ãªããæ··ä¹±ãæããã®ã ãšæããŸãã 以åã«æååããæååãã«ãã£ã¹ãããããšã¯ãããŸããã ææ¡ãããŠããããã«åãåæããŠäœ¿çšããããšã¯ãããã¯ãªãŒã³ãªè§£æ±ºçãšããŠç§ã«ã¯èãããŸãã
@zaiddabaeenåé¡ã¯æ¬¡ã®ãšããã§ãã
const res = this.http.get(url, options);
res
ã®çš®é¡ã¯äœã§ããïŒ options
ã®å€ã«ãã£ãŠç°ãªããŸãããTypescriptã«ã¯ãã€ã³ã©ã€ã³åãããŠããªãå Žåã«ãããã®å€ãäœã§ããããç¥ãæ¹æ³ããããŸããã
èšãæãããšïŒ
const res = this.http.get(url, {responseType: 'text'});
ãšåçã§ã¯ãããŸãã
const options = {responseType: 'text'};
const res = this.http.get(url, options);
æåã®1ã€ã§ã¯ãTypescriptã¯res
ã®ã¿ã€ããObservable<string>
ã§ãããšæšæž¬ã§ããŸããã2ã€ç®ã§ã¯ãåæšè«ã§ã¯å€å¥ã§ããŸããã ãã®æ©èœãè¿œå ããå Žåã Observable<any>
ãè¿ãå¿
èŠããããŸãããããã¯ãšã¯ã¹ããªãšã³ã¹ãäœäžããŸãã
ãããæãŸããã»ãšãã©ã®å Žåã¯ãã¹ãã¬ããæŒç®åã§è§£æ±ºã§ãããšæããŸãã
// Some options we want to control dynamically.
const options = {headers: ..., params: ...};
const res = this.http.get(url, {...options, responseType: 'text'});
ãã®ããã«ããŠãTypescriptã¯çœ²åãšresponseType
ã®å€ã«åºã¥ããŠæ»ãåãæšæž¬ã§ããŸããããªããžã§ã¯ãå
šäœãåæ§ç¯ããã«ãªãã·ã§ã³ãæž¡ãããšãã§ããŸãã
代ããã«ãç®çã®å¹æãåŸãããã«åé¿çãå®è¡ããå¿
èŠããããŸããïŒ ããã¯ããã«ã€ããŠè¡ãæ¹æ³ã§ã¯ããããŸããã ç§ã¯ããã«ã€ããŠããªãé·ãéã³ã³ãã¥ãŒã¿ã§å«ãã§ããŸããç§ã¯HttpClient
ãã©ãããããµãŒãã¹ãæã£ãŠããŸããã$ïŒ responseType
ãèšå®ããããšããŠãæ©èœããŸããããããå¯äžã®æ¹æ³ã§ãresponseType: 'text' as 'json'
ãå®è¡ããããšã§ããšã©ãŒã解æ¶ã§ããŸããäžèšã®åé¿çã¯ããããæ©èœããŸããã
@chrillewoodzãã ããããã©ã«ãã¯JSONã§ãã ãªãjson
ã«ãã£ã¹ãããã®ã§ããïŒ
ç§ã®ã¢ãããŒãã¯æ©èœããŠãããçŸåšæ¬çªç°å¢ã§å®è¡ãããŠããããšã確èªã§ããŸãã
@zaiddabaeenç§ã¯jsonã«äœããã£ã¹ãããŠããŸããïŒç§ãç¥ãéãïŒã ããã¯ç§ãæã£ãŠãããã®ã§ãïŒ
public get<T>(url: string, params?: {[key: string]: any}, headers?: HttpHeaders): Observable<T> {
return this.http.get<T>(this.config.host + url, this.getRequestOptions(params, headers));
}
private getRequestOptions(params?: any, customHeaders?: HttpHeaders) {
let defaultHeaders: HttpHeaders = new HttpHeaders();
defaultHeaders = defaultHeaders.set('Content-Type', 'application/json');
return {
headers: customHeaders ||Â defaultHeaders,
params: params ? this.convertJSONtoParams(params) : null
};
}
getRequestOptions
ã®return
ã«responseType: 'text'
ãè¿œå ããããšãããšããšã©ãŒãçºçããŸãã
responseType: 'text' as 'text'
ã䜿çšãã
äžèšã®åé¿çã¯ããããæ©èœããŸããã
ç§ã¯ãã§ã«äžèšã®ãã¹ãŠãè©ŠããŸããïŒ|
ç§ããã®åé¡ãæ±ããŠããŸããããgetåŒã³åºããã<T>
ãåé€ããããšã§ã$ïŒ responseType: 'text'as 'text'
ã䜿çšããŠåäœãããããšãã§ããŸããã
ããšãã°ãããã¯æ©èœããããšã©ãŒãè¿ããŸãã
const options: { responseType: 'text' as 'text', withCredentials: true };
this.httpClient.get<string>(url, options)
ããããããã¯æ©èœããŸãïŒ
const options: { responseType: 'text' as 'text', withCredentials: true };
this.httpClient.get(url, options)
ãšã©ãŒãªãã§åäœãããå¯äžã®æ¹æ³ã¯ã @ roddyã®äŸã䜿çšããããšã§ãããããã¯ãã€ã³ã©ã€ã³ãªãã·ã§ã³ã䜿çšããããšã§ã...
ããã¯åäœããŸããïŒ
ãããŠã©ã¡ããããŸããïŒ
Angular v4.4.3
typeof T
ãèªåçã«æšæž¬ããããããresponseTypeãjson
以å€ã«æå®ãããŠããå Žåã¯ããžã§ããªãã¯ã䜿çšããªãã§ãã ããã
get()
ã¡ãœããã§ã©ã®ããã«å®çŸ©ãããŠããããèŠãŠã¿ãŸããã
/**
* Construct a GET request which interprets the body as an `ArrayBuffer` and returns it.
*
* <strong i="10">@return</strong> an `Observable` of the body as an `ArrayBuffer`.
*/
get(url: string, options: {
headers?: HttpHeaders;
observe?: 'body';
params?: HttpParams;
reportProgress?: boolean;
responseType: 'arraybuffer';
withCredentials?: boolean;
}): Observable<ArrayBuffer>;
/**
* Construct a GET request which interprets the body as a `Blob` and returns it.
*
* <strong i="11">@return</strong> an `Observable` of the body as a `Blob`.
*/
get(url: string, options: {
headers?: HttpHeaders;
observe?: 'body';
params?: HttpParams;
reportProgress?: boolean;
responseType: 'blob';
withCredentials?: boolean;
}): Observable<Blob>;
/**
* Construct a GET request which interprets the body as text and returns it.
*
* <strong i="12">@return</strong> an `Observable` of the body as a `string`.
*/
get(url: string, options: {
headers?: HttpHeaders;
observe?: 'body';
params?: HttpParams;
reportProgress?: boolean;
responseType: 'text';
withCredentials?: boolean;
}): Observable<string>;
/**
* Construct a GET request which interprets the body as JSON and returns it.
*
* <strong i="13">@return</strong> an `Observable` of the body as an `Object`.
*/
get(url: string, options?: {
headers?: HttpHeaders;
observe?: 'body';
params?: HttpParams;
reportProgress?: boolean;
responseType?: 'json';
withCredentials?: boolean;
}): Observable<Object>;
/**
* Construct a GET request which interprets the body as JSON and returns it.
*
* <strong i="14">@return</strong> an `Observable` of the body as type `T`.
*/
get<T>(url: string, options?: {
headers?: HttpHeaders;
observe?: 'body';
params?: HttpParams;
reportProgress?: boolean;
responseType?: 'json';
withCredentials?: boolean;
}): Observable<T>;
responseTypeãjson
ã®å Žåãåã¯éçã«ããããªããã®ã«ãããªãåŸãªããããããã¯å®å
šã«çã«ããªã£ãŠããŸããä»ã®ãã¹ãŠã®å Žåããžã§ããªãã¯ã¯å¿
èŠãããŸããã
@reppnersããã«ã¡ã¯ã¹ããã¡ã³ãäžèšã®èª¬æãããããšãã ãã ããã©ã®ããã«è©ŠããŠããã¢ããªã§ç»åã®URLãã€ã³ã¿ãŒã»ããããããã«äœ¿çšããŠãããµãŒãã¹ã§æ°ããHttpClientãæ©èœãããããšã¯ã§ããŸããã
get(url: string): Observable<any> {
return new Observable((observer: Subscriber<any>) => {
let objectUrl: string = null;
this.http
.get(url, {headers: this.getHeaders(), responseType: ResponseContentType.Blob} )
.subscribe(m => {
objectUrl = URL.createObjectURL(m.blob());
observer.next(objectUrl);
});
return () => {
if (objectUrl) {
URL.revokeObjectURL(objectUrl);
objectUrl = null;
}
}
});
}
getHeaders(): Headers {
let headers = new Headers();
let token = this.authService.getToken();
if (token) {
headers.set('Authorization', 'Bearer ' + token);
}
return headers;
}
responseType: 'blob'
ãGETãªã¯ãšã¹ãã«çŽæ¥èšå®ããããšããäžèšã®ããã«options: { }
ã«èšå®ããããšãã§ããŸããã
@ a-kolybelnikovããªãã®å Žåã次ã®ãããªãã®ã䜿çšã§ããŸãã
.get(url, { headers: this.getHeaders(), responseType: ResponseContentType.Blob as 'blob' })
@btoryããããšãããããŸãã è©ŠããŸããããæ©èœããŸããã
ãããè©ŠããŠãã ããïŒ..ãresponseTypeïŒ 'text' as'json '
@ rds-rafaelã«æè¬ããŸãã this.http.get<ArrayBuffer>(this.pdfLink, {responseType: 'arraybuffer' as 'json'})
ã¯ç§ã®ããã«åããŸãããå°ãå¥åŠã§ãã
æåŸã«ã解決çã¯æ£ããåæå®ãããåŒæ°ãæž¡ãããšã§ãã
ãããã®å ŽåïŒ
.get(url, { 'responseType: 'blob' as 'json' })
ãããã£ãŠããã®æ¹æ³ã§HttpãHttpClientã«ãªãã¡ã¯ã¿ãªã³ã°ãããšããè°è«ã«åã£ã人ã¯èª°ã§ãééã£ãŠããŸãã
@chrillewoodzã®ãœãªã¥ãŒã·ã§ã³ã¯ç§ã®ããã«åãã
ç§ã¯æ¬¡ã®ãããªãã®ãæã£ãŠããŸããthis.httpClient.post<string>(url, data, {responseType: 'text' as 'json'});
ããã¯ãç§ãåŒã³åºãããAPIãåã«æååãè¿ãããã«æ©èœããŸããã ãã¡ããããžã§ããªãã¯ãåé€ãããšããããšã¯ããã¹ãŠã次ã®ããã«å€æŽããå¿
èŠãããããšãæå³ããŸãã
this.httpClient.post(url, data, {responseType: 'text' as 'text'});
ããã«å¯Ÿããåé¿çã¯ã»ãã®ããããªç ©ãããã§ãããšç§ã¯æããŸãããããã¯æ¬åœã«åä»ã§ãå®éã«ãã®çããèŠã€ããã®ã¯éåžžã«å°é£ã§ããã ãããããé©åã«ææžåãããŠããããããçŽæçãªè§£æ±ºçã«å°éãããšæããŸãã
@nortainããªãã¯ééããªãã©ã¡ããå¿ èŠãããŸããã
this.httpClient.post(url, data, {responsesType: 'text'})
<string>
ãæå®ããªããŠãã Observable<string>
ãæäŸãããŸãã 'text' as 'text'
ãšèšãå¿
èŠã¯ãããŸãããTypescriptã¯ãããç¥ã£ãŠããŸãã
ã¿ã€ããã©ã¡ãŒã¿ãHttpClient
ã¡ãœããã«æž¡ãå¿
èŠããã_only_æéã¯ã responseType: 'json'
ã§ãã ä»ã®ãã¹ãŠã¯æé»çã§ãã
@alxhubãããããããšãããããŸããããã¯ãã£ãšçã«ããªã£ãŠããŸãããžã§ããªãã¯ãåé€ãããšãã«ããããã¹ãããšããŠããããããããšããªãã£ãããšã«æ°ã¥ããŸããã ãŸãããžã§ããªãã¯ãjsonå¿çã察象ãšããŠããããšãç¥ã£ãŠãããšã圹ã«ç«ã¡ãŸãã ãã©ããŒã¢ããã«æè¬ããŸãã
@alxhub
observe
ããããã£ã§åãåé¡ã«çŽé¢ããŠãã
this.http.get(endpoint, {
observe: 'response'
})
[ts]
Argument of type '{ headers: HttpHeaders; observe: string; }' is not assignable to parameter of type '{ headers?: HttpHeaders | { [header: string]: string | string[]; }; observe?: "body"; params?: Ht...'.
Types of property 'observe' are incompatible.
Type 'string' is not assignable to type '"body"'.
observe: 'body'
ã®ã¿ãæ©èœããŸãã 'response'
ãš'events'
ã¯ããã§ã¯ãããŸããã
ãã¹ãŠãç§ã«ãšã£ãŠéåžžã«è€éã«æããŸãã çŸåšäœ¿çšãããŠããæšè«ã§ã¯ãªããããŸããŸãªçµæãåŒã³åºãããã®ããŸããŸãªæ¹æ³ãå¿ èŠã§ãã
@PastafarianåæããŸããããå Žåã«ã¯ãïŒåãresponseTypeãªãã·ã§ã³ã䜿çšããŠïŒæ¬¡ã®ããã«è¡šç€ºãããŸãã
this.httpClient.requestãè¿ããŸã
åäœããŸãããããã¯åäœããŸããïŒ
this.httpClient.postïŒ '/ login'ãoptionsïŒãè¿ããŸã
ãã®httpclientã以åã®å身ãããç°¡åãŸãã¯çŽæçã§ããããšã«åæãããã©ããã¯ããããŸããã ããã©ããããããã¯äžæ Œå¥œã§ãå€ãã®è£ã§ã®æšè«ã«äŸåããŠããŸãã
ç§ã¯æ¬åœã«ãã©ããŒããããšã¯ã§ããŸããã ç§ã®ã³ãŒãã§ããã«ééããŸããïŒ
login(username: string, password: string): Observable<string> {
const body = `username=${username}&password=${password}`;
const options = {
headers: new HttpHeaders({ 'Content-Type': 'application/x-www-form-urlencoded' }),
responseType: 'text'
};
return this.http.post(this.loginUrl, body, options);
}
ææ°ããŒãžã§ã³ã®VSCodeã䜿çšãããšãæåŸã®è¡ã§options
ãééã£ãŠããããšãããããŸãã
Argument of type '{ headers: HttpHeaders; responseType: string; }' is not assignable to parameter of type '{ headers?: HttpHeaders | { [header: string]: string | string[]; }; observe?: "body"; params?: Ht...'.
Types of property 'responseType' are incompatible.
Type 'string' is not assignable to type '"json"'.
ã³ã¡ã³ããèªãã§ãåé¿çãšããŠresponseType: 'text' as 'text'
ãŸãã¯responseType: 'text' as 'json'
ãæžããªããã°ãªããªããšæããŠããŸãã ããããŸãããããã¯ã©ãããæå³ã§ããïŒ
@tobihagemann responseType: 'text' as 'text'
ã¯ããªããæããã®ã§ãã 'text'
ã¯'json'
$ã§ã¯ãããŸããã
ããããšãã@ alxhubã ç§ã¯ããªãã®ã³ã¡ã³ããèªã¿çŽããäœãèµ·ãã£ãŠããã®ãç解ãå§ããŸãïŒãã£ãšæ³šææ·±ãèªãã¹ãã§ããïŒã
ã€ã³ã©ã€ã³ã§ã¯ãªãããã£ã¹ãããããã€ã³ã©ã€ã³ã§ã¯ãªããã¿ã€ãã«äŸåãããã®ã«ã¹ãã¬ããæŒç®åã䜿çšããããéžæããã®ãç§ã®éžæã ãšæããŸããïŒ åºæ¬çã«ããããã®3ã€ã®ãªãã·ã§ã³ïŒ
login(username: string, password: string): Observable<string> {
const body = `username=${username}&password=${password}`;
return this.http.post(this.loginUrl, body, {
headers: new HttpHeaders({ 'Content-Type': 'application/x-www-form-urlencoded' }),
responseType: 'text'
});
}
login(username: string, password: string): Observable<string> {
const body = `username=${username}&password=${password}`;
const options = {
headers: new HttpHeaders({ 'Content-Type': 'application/x-www-form-urlencoded' }),
responseType: 'text' as 'text'
};
return this.http.post(this.loginUrl, body, options);
}
login(username: string, password: string): Observable<string> {
const body = `username=${username}&password=${password}`;
const options = {
headers: new HttpHeaders({ 'Content-Type': 'application/x-www-form-urlencoded' }),
};
return this.http.post(this.loginUrl, body, { ...options, responseType: 'text' });
}
as 'text'
ããªã¢ã³ãïŒ2çªç®ã®ãªãã·ã§ã³ïŒã¯ããã®åé¡ã§è¿°ã¹ãããŠããããã«ãæ¬åœã«ãåé¿çãã§ããïŒ ãããšããããã¯ç©äºãè¡ãããã®åãªãæ¹æ³ã§ããïŒ æšå¥šããããªãã·ã§ã³ã¯ãããŸããïŒ
ãããç§ã«ãšã£ãŠã®éèŠãªçãã§ããïŒ https ïŒ//github.com/angular/angular/issues/18586#issuecomment -323216764
Typescriptã³ã³ãã€ã©ããªã¿ãŒã³ã¿ã€ãã«ã€ããŠæå¥ãèšããªãããã«ããã«ã¯ã get
ïŒãŸãã¯post
ïŒã®åŒã³åºãã§ãªãã·ã§ã³ãªããžã§ã¯ããã€ã³ã©ã€ã³åããå¿
èŠããããŸãã
resãArrayBufferã§ã¯ãªããšæå¥ãèšããã«ãããã³ã³ãã€ã«ããå¯äžã®æ¹æ³ã¯ã次ã®ãããªãªãã·ã§ã³ãã€ã³ã©ã€ã³åããããšã§ãã
this.http.post<AuthResult>(this.AuthenticationEndpoint,
body, { withCredentials: false }).subscribe(res => {
ãã®ã¢ãããŒãå šäœã¯ãçŽæã«åãã圢ã§ãã ç§ã¯ãããäœæ¥ãç¶ããŠããŸããããã©ã¡ãŒã¿ãšå¿çãšããŠã®ãã¡ã€ã«ã䜿çšããŠãPOSTãªã¯ãšã¹ãã®å¿çãã³ã³ãœãŒã«ãã°ã«èšé²ããããšã¯ã§ããŸããã
髪ãæããŠããŸãã
ããããŸããããããç§ã®ããã«åãããã®ã§ãïŒ
ã¢ã¯ã·ã§ã³.tsïŒ
generatePOR(){
this._api.generatePOR(this.selection).subscribe(res => {
if(res !== null && res !== undefined){
console.log(res.body);
}
}, (error) => console.log(error), () => {});
}
api.tsïŒ
generatePOR(idList): any {
const apiURL = `${this.API_URL}/purchaseorders/generatePOR`;
this.PORresult = this._http.post(apiURL, idList, {
observe: 'response',
headers: new HttpHeaders({'Content-Type': 'application/json'}),
responseType: 'text' as 'text'
}).catch(this.handleError);
return this.PORresult;
}
ãããããã®é倧ãªå€æŽã«å¯Ÿããç§ã®åé¿çã§ãã
const options: {
headers?: HttpHeaders;
observe: "response";
params?: HttpParams;
reportProgress?: boolean;
responseType: "arraybuffer";
withCredentials?: boolean;
} = {
observe: "response",
responseType: "arraybuffer"
};
this.http
.get(blobRequest.url, options)
.map(response => <ArrayBuffer>response.body)
ãŸããArrayBufferã¯getã«ãã£ãŠãè¿ãããŸããããResponseãªããžã§ã¯ãã¯è¿ãããŸãã
以äžã«è¿œå ããã ãã§ãAngular5ã§ããŸãæ©èœããŸããã
const httpOptions = {
ããããŒïŒæ°ããHttpHeadersïŒ{
'Content-Type'ïŒ 'Application / json; charset = UTF-8 '
}ïŒã
responseTypeïŒ 'text' as'text '
};
const body = JSON.stringifyïŒparamsïŒ;
this._http.postïŒurlãbodyãhttpOptionsïŒ;ãè¿ããŸãã
ããã§ãåãåé¡ãçºçããŸãã...ãããã¹ãããšããŠãããã¹ãããè¿œå ãããšè§£æ±ºããŸãã...
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json',
'Accept': 'text/html'
})
};
return this.http.post<any>(url, { 'new': new_elements, 'old': old_elements }, {...httpOptions, responseType: 'text' as 'json' });
ããã®@jmoeyersonsã«äŒŒãŠããŸã... Angular 5.2.10
return this.http.post(
url,
data,
{ headers: headers, responseType: 'text' as 'text', withCredentials: false }).map(res => {
console.log(res);
});
ãŸã
return this.http.post<any>(
url,
data,
{ headers: headers, responseType: 'text' as 'json', withCredentials: false }).map(res => {
console.log(res);
});
ããã¯ãŸã£ããææžåãããŠããŸããïŒhttps://angular.io/api/common/http/HttpClient#postïŒ
TSã¯ç°¡åã§ãïŒïŒ
const headers = new HttpHeaders({
'Authorization': 'Bearer ' + token
});
const params = new HttpParams[]
const observe = 'response';
const reportProgress = false;
const responseType = 'text';
const withCredentials = false;
const options = {
headers: headers,
observe: <any>observe,
params: params,
reportProgress: reportProgress,
responseType: <any>responseType,
withCredentials: withCredentials
};
return this.http.get<HttpResponse>(href, options);
responseType: 'text' as 'text'
ã®ãããªãã®ãèŠããšãç§ã¯å£ããããã«æããŸãã ãã¶ããHttp options
ãªããžã§ã¯ãå
šäœããæ瀺çãªåæåãæã€æ確ã«å®çŸ©ãããã€ã³ã¿ãŒãã§ã€ã¹ã§ããå¿
èŠããããŸãã
@ghillertæ®å¿µãªãããåãåé¡ãçºçããŸãã ã€ã³ã¿ãŒãã§ã€ã¹ã®ãã£ãŒã«ãã®ã¿ã€ãã¯ãç¹å®ã®å€ã§ã¯ãªããåæåã«ãªããŸãã HttpClient
ã®åæšè«ã¯ã get()
ã«æž¡ããããªããžã§ã¯ãã®åã«ãã£ãŠãç¹å®ã®_value_åã«çµã蟌ãŸããŸãã
ãã ããããã«ã¯ç°¡åãªè§£æ±ºçããããŸãã
const options = {
headers: ...,
params: ...,
reportProgress: false,
withCredentials: true,
};
return this.http.get(url, {...options, responseType: 'text'});
åºæ¬çã«ã¯ã get()
ã®åŒã³åºãã§responseType
ãšobserve
ã®å€ãçŽæ¥æå®ããå¿
èŠããããŸãã ä»ã®ãã¹ãŠã¯options
ãªããžã§ã¯ãã«å
¥ããããšãã§ããŸãã
ããã«ã€ããŠã¯ã次ã®å Žæã§èšåããŠãã ããã
https://angular.io/guide/http#requesting -non-json-data
ç§ã®ã³ãŒãïŒ
return this.http.get<string>(this.apiURLDisplays+'/'+name, { responseType: 'text' })
.pipe(
catchError(this.handleError)
);
ç§ã¯ãããç解ããŠããŸãã-ngãµãŒãã¯æ¬¡ã®ããã«ççºããŸãïŒ
ERROR in src/app/shared/api.service.ts(937,68): error TS2345: Argument of type '{ responseType: "text"; }' is not assignable to parameter of type '{ headers?: HttpHeaders | { [header: string]: string | string[]; }; observe?: "body"; params?: Ht...'.
Types of property 'responseType' are incompatible.
Type '"text"' is not assignable to type '"json"'.
ããããããã¯ããŒãžãæäŸãããã©ãŠã¶ã§æ£åžžã«åäœããŸã...ããã§ãããã¯åãªãã¿ã€ãã¹ã¯ãªããã®åé¡ã§ãããã©ãããããããŸã javascriptã«å€æãããŠåäœããŸããïŒ
åæåã¯ãã£ãšè¯ãã£ãã§ããã...
ãŸãã 'text' as 'json'
ãæ©èœãããšèšãããŠããçç±ã¯ãäžèšã®ããã«get<string>()
ãããå Žåã¯ãVSCodeã«ãããšæããŸãã 'text' as 'text'
ãããå Žåã¯ããã®äžã«èµ€ãç·ãåŒãããŸããã 'text' as 'json'
<string>
ããã®å Žåæé»çã§ãããšãã@alxhubã®ã³ã¡ã³ããèªãã ãšããã <string>
ãåãåºããVSCodeã¯return this.http.get(this.apiURLDisplays+'/'+name, { responseType: 'text' as 'text' })
ãåãå
¥ããŸãã
responseTypeãšèªèšŒãµãŒãã¹ã®äž¡æ¹ã䜿çšããŠãããã§åäœãããããšãã§ããŸããã
let headers2: HttpHeaders = new HttpHeaders({
'Authorization' : 'my-auth-token'
});
this.httpClient.get(this.url, { headers : headers2, responseType : 'blob' }).subscribe(
data => console.log(data),
err => console.log(err)
)
ãã®åã«ãç§ã¯ãããè©ŠããŸããïŒ
const httpOptions2 = {
headers: new HttpHeaders({
'Authorization' : 'my-auth-token'
}),
responseType : 'blob'
};
this.httpClient.get(this.url, httpOptions2).subscribe(
data => console.log(data),
err => console.log(err)
)
...ãã©ã¡ãŒã¿ãšããŠhttpOptions2ã§ããã¯ç§ã«äžããã§ããã
ã¿ã€ã '{ãããââãŒã®åŒæ°ïŒHttpHeaders; responseTypeïŒæåå; } 'ã¯ã¿ã€ã' {ããããŒã®ãã©ã¡ãŒã¿ã«å²ãåœãŠãããšãã§ããŸãããïŒïŒHttpHeaders | {[ããããŒïŒæåå]ïŒæåå| ã¹ããªã³ã°[]; }; 芳å¯ããŸããïŒïŒãäœã; paramsïŒïŒHt ... 'ã
åŸè ã䜿ããªãçç±ã¯äœã§ããïŒ
*ãmy-auth-tokenããå€æŽãããŸãã
@ H36615
const httpOptions2 = {
headers: new HttpHeaders({
'Authorization' : 'my-auth-token'
}),
responseType : 'blob'
};
ãã®ã¹ããããã§ã¯ãTypeScriptã¯httpOptions2
ã®ã¿ã€ããæšæž¬ããŸã
{
headers: HttpHeaders;
responseType: string;
}
ãã ãã HttpClient
ã§ã¯ãæž¡ãoptions
ãªããžã§ã¯ãã«responseType
ãŸãã¯observe
ã®å€ãããå Žåããããã¯ç¹å®ã®ã¿ã€ãã§ããã string
ã ãã§ã¯ãããŸããã
ããã§äœãã足ããŸãããïŒ ãã®ãšã©ãŒãçºçããã®ã¯ãresponseTypeblobã ãšæããŸãã
const httpOptions = {
...
responseType:'blob'
};
ã¿ã€ããšã©ãŒãçºçããŸãããçºçããå Žå
const httpOptions = {
...
responseType:'blob' as 'blob'
};
ããã¯ããŸãæ©èœããŸãã ãããã°ãããŠãããšç§ã¯ééã£ãŠãããšæããŸããïŒ
ããã¯èšèšã«ãããã®ã§ãããšããåçã¯ãå®éã«ã¯è¯ãçãã§ã¯ãããŸããããã®ãã©ã¡ãŒã¿ãæåŸ ã©ããã«æ©èœããHttpRequestãäœæã§ããã°ãã©ãã§ãåãããã«æ©èœããããšãæåŸ ã§ããŸãã ãã®ããã¥ã¡ã³ããåãäžãããšããã®ããããŒãªã¢ãããŒãã«ã€ããŠã¯ã©ãã«ãèšåãããŠããŸããã
確ãã«ç§ã¯TypeScriptãåããŠäœ¿çšããŸãããããã¯TypeScriptã®åé¡ã§ããããããšãAngularã§ããïŒ
ç§ã¯äžæ¥ã®å€§éšåããéµäŸ¿é
éå¡ãæ£ããå¿çãããã®ã«http.getãå¿çããªãã£ãçç±ãç解ããããšã«è²»ãããŸããã httpïŒgetã䜿ã£ãŠã¿ãããšæããŸãã
å®éãæåã®å°æã®åŸã®èãçŽãã§ãããã¯ä»ã®ããã«ç§ã«ã¯çã«ããªã£ãŠããŸãconst httpOptions = {
...
responseType:'blob' as 'blob'
};
äžèšã®@alxhubã®ã©ããã«ãhttpClientã«ãªãã©ã«è¡šèšãæ¿å
¥ããããšãšåãã§ã¯ãããŸããã
blob
ã¿ã€ãã®å Žåã«è¡ã£ãããšã¯ãAngular6ã§ã¯ãšã©ãŒãªãã§æ£åžžã«åäœããŸãã
responseType: 'blob' as 'blob'
ã®äž¡æ¹ã§è©ŠããŸããããæ§æãšã©ãŒãçºçãããã«ãã§ããŸããã§ããã
const options = {headers: this.httpHeaders, responseType: 'blob' as 'json'};
return this.http.get<Blob>(Constants.BASE_URL + Constants.DOWNLOAD_FILE + path, options
)
ç§ã®ããã«åããŠããŸã
_downloadWeb(url, api, mimeType) {
var token = getTokenWeb();
let data = {
"siteId": this.state.idSite
}
Axios.defaults.headers.common['Authorization'] =
$ {token}
Axios.defaults.headers.common['Accept'] =
$ {mimeType}
Axios.defaults.headers.common['Content-Type'] =
application / json
Axios.post(url + api, data, {
responseType: 'blob',
})
.then((response) => {
let blob = new Blob([response.data], { type: mimeType });
saveAs(blob, guid() + ".xlsx")
})
.catch(function (error) {
console.log("_downloadWeb", error);
});;
}
responseTypeãè¿œå ããŸãïŒ 'blob'ã¯æé»çã«çµæãObservableã«å€æŽããŸã
httpClient.postãŸãã¯httpClient.getãå ¥åããªããšãåé¡ã解決ããŸã
return this.httpClient.post<any>(
`${environment.apiEndpoint}/${environment.apiVersion}/template-version/${templateId}/${version}/test`,
{ answers },
{ headers: this.blobHeaders, responseType: 'blob' })
.pipe(
tap(
// Log the result or error
data => console.log('You received data'),
error => console.log(error)
)
);
ãšã©ãŒãçºçããŸãã
return this.httpClient.post(
`${environment.apiEndpoint}/${environment.apiVersion}/template-version/${templateId}/${version}/test`,
{ answers },
{ headers: this.blobHeaders, responseType: 'blob' })
.pipe(
tap(
// Log the result or error
data => console.log('You received data'),
error => console.log(error)
)
);
äœå
ãã®åé¡ã¯Angular7.1ã§ãåŒãç¶ãçºçããŸã
ç§ã¯æçµçã«ãããæãã€ããŸããããããŠç§ã¯ãããå ±æããããšãã§ããŸãããïŒ
// define this namespace somewhere
namespace ResponseType {
export const JSON = 'json' as 'json';
export const ArrayBuffer = 'arraybuffer' as 'arraybuffer';
export const Blob = 'blob' as 'blob';
export const Text = 'text' as 'text';
}
`` `typescript
//äžèšã®åå空éãã€ã³ããŒããã次ã®ããã«äœ¿çšããŸã
const reqOpts = {
paramsïŒparamsã
ããããŒïŒããããŒã
responseTypeïŒResponseType.JSONã
};
//ã¿ã€ããšã©ãŒãªããæ£ãã眲åãéžæãããŠããŸã
const a = await this.http.getïŒurlãreqOptsïŒ;
const b = await this.http.get
https://github.com/angular/angular/issues/18586#issuecomment-327440092 gave a good hint at how to implement this.
This solution also work for the `observe` parameter.
____
Unless I missed something, this could be implemented in Angular directly, isn't ?
You would need to first put the following in the declaration `@angular/common/http/src/client.d.ts`:
```typescript
declare module '@angular/common/http' {
export namespace HttpResponseType {
export const JSON: 'json';
export const ArrayBuffer: 'arraybuffer';
export const Blob: 'blob';
export const Text: 'text';
}
export declare type HttpObserve = 'body' | 'events' | 'response';
export namespace HttpObserve {
export const Body: 'body';
export const Events: 'events';
export const Response: 'response';
}
}
次ã«ããããangular/packages/common/http/src/client.ts
ã«å®è£
ããŸãã
export namespace HttpResponseType {
export const JSON: 'json' = 'json';
export const ArrayBuffer: 'arraybuffer' = 'arraybuffer';
export const Blob: 'blob' = 'blob';
export const Text: 'text' = 'text';
}
export type HttpObserve = 'body' | 'events' | 'response';
export namespace HttpObserve {
export const Body: 'body' = 'body';
export const Events: 'events' = 'events';
export const Response: 'response' = 'response';
}
æåŸã«ã2ã€ã®åå空éãé©åã«ãšã¯ã¹ããŒãããŠ@angular/common/http
ã«æ»ãå¿
èŠããããŸãã
@rgoupilããã¯ã¯ãŒã«ãªã¢ã€ãã¢ã§ãïŒ
ç§ãåãåé¡ãæ±ããŠããŸããã äžèšã®ææ¡ã®ããã€ããå®è£ ããããšããŠ30ååŸãç§ã¯æ¬¡ã®ããšãé²ããŸããã§ããïŒæ±ãã§ãã...ïŒïŒ
// I actually get the response type as a parameter to my function
const responseType = 'text';
const options = {
headers: new HttpHeaders()
};
// @ts-ignore
options['responseType'] = responseType;
this.http.get(url, options);
ç§ã¯ãããããã¯ããå¿
èŠããããŸãconst options = {responseType: 'text' as 'json'};
this.httpClient.get<string>(url, options).subscribe()
httpOptionså€æ°ããã£ã¹ãããŠObjectãšå ¥åããŸãã
const httpOptions: Object = {
responseType: 'blob'
};
ããã¥ã¡ã³ãã§æå®ãããŠããããã«ïŒhttps ïŒ//angular.io/api/common/http/HttpClient#get
ããã«é¢ãããã¥ãŒã¹ã¯ãããŸããïŒ ç§ã¯HttpClient.postã®ãªãã·ã§ã³ã§åãåé¡ã«èŠããã§ããŸã...
Angular 7ã§ã®äœæ¥ïŒ8ã¯ãŸã ãã¹ããããŠããŸããïŒ
import { HttpClient, HttpHeaders, HttpResponse } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
@Injectable()
export class RequestService {
httpOptions = {
headers: new HttpHeaders({
Accept: 'application/json;charset=utf-8',
Authorization: `Basic ${btoa('user:password')}`,
'Content-Type': 'application/json;charset=utf-8'
}),
observe: 'response' as 'body'
};
constructor(private readonly httpClient: HttpClient) {
}
get<T>(uri: string): Observable<HttpResponse<T>> {
return this.httpClient.get<HttpResponse<T>>(uri, this.httpOptions);
}
post<T>(uri: string, value: T): Observable<HttpResponse<T>> {
return this.httpClient.post<HttpResponse<T>>(uri, value, this.httpOptions);
}
put<T>(uri: string, value: T): Observable<HttpResponse<T>> {
return this.httpClient.put<HttpResponse<T>>(uri, value, this.httpOptions);
}
}
ç§ããã®åé¡ãæ±ããŠããŸããããgetåŒã³åºããã
<T>
ãåé€ããããšã§ã$ïŒresponseType: 'text'as 'text'
ã䜿çšããŠåäœãããããšãã§ããŸãããããšãã°ãããã¯æ©èœããããšã©ãŒãè¿ããŸãã
const options: { responseType: 'text' as 'text', withCredentials: true }; this.httpClient.get<string>(url, options)
ããããããã¯æ©èœããŸãïŒ
const options: { responseType: 'text' as 'text', withCredentials: true }; this.httpClient.get(url, options)
ãã®è§£æ±ºçã¯ç§ã®ããã«åã
åäœããŸãã
const options= {
responseType:'arraybuffer'
};
this.httpClient.get(url, options);
ããã¯åäœããŸã
const options: any = { // The options with data type any does work well.
responseType:'arraybuffer'
};
this.httpClient.get(url, options);
const httpOptions: Object = { responseType: 'blob' };
åäœããŸãã
const options= { responseType:'arraybuffer' }; this.httpClient.get(url, options);
ããã¯åäœããŸã
const options: any = { // The options with data type any does work well. responseType:'arraybuffer' }; this.httpClient.get(url, options);
ãªãã·ã§ã³ãany
ãŸãã¯Object
ãšããŠå®£èšããããšã¯ã responseType
ã®èšå®ã®ã¿ã«é¢å¿ãããããããããã®åé¡ã«ééãã人ã
ã®ã»ãšãã©ã®ã±ãŒã¹ãã«ããŒããå Žåã¯åé¡ãããŸããã ãã ããä»ã®äœãïŒããããŒãªã©ïŒãèšå®ãããå Žåãtypescriptã¯ã¿ã€ããã§ãã¯ãæ¯æŽã§ããªããªããŸãã ãããç§ãææ¡ããçç±ã§ããã_bracket notation_ã䜿çšããŠ_responseType_ã®å€ãèšå®ãããã®è¡ã®ã¿ã_ts-ignore_ããããšã奜ã¿ãŸããã
ã³ã³ãã€ã©ãšã©ãŒïŒ Type '"text"' is not assignable to type '"json"'.
ïŒãåãé€ãã®ã«åœ¹ç«ã£ã解決çã®1ã€ã¯ãã³ã³ã¹ãã©ã¯ã¿ã䜿çšããŠHttpRequest
ãäœæããããšã§ããã ãããŠã http.request
ã䜿çšããŸãã 誰ããå©ããŠãããããšãé¡ã£ãŠããŸã
æãåèã«ãªãã³ã¡ã³ã
@zaiddabaeençŸåšãããã¯ä»æ§ã«ãããã®ã§ãã Typescriptã¯ã
get()
ã®æ£ããæ»ãã¿ã€ããéžæããããã«ãobserve
ãšresponseType
ã®å€ãéçã«æšæž¬ã§ããå¿ èŠããããŸãã äžé©åã«å ¥åãããoptions
ãªããžã§ã¯ããæž¡ããšãæ£ãããªã¿ãŒã³ã¿ã€ããæšæž¬ã§ããŸãããå¥ã®åé¿çã¯æ¬¡ã®ãšããã§ãã