Angular HttpClient "파싱 중 Http 실패"
Angular 4에서 Laravel 백엔드로 POST 요청을 보내려고합니다.
My LoginService에는 다음 방법이 있습니다.
login(email: string, password: string) {
return this.http.post(`http://10.0.1.19/login`, { email, password })
}
내 LoginComponent에서이 메서드를 구독합니다.
.subscribe(
(response: any) => {
console.log(response)
location.reload()
},
(error: any) => {
console.log(error)
})
그리고 이것은 내 Laravel 백엔드 방법입니다.
...
if($this->auth->attempt(['email' => $email, 'password' => $password], true)) {
return response('Success', 200);
}
return response('Unauthorized', 401);
내 Chrome 개발 도구에 200 상태 코드가있는 내 요청이 성공했다고합니다. 하지만 내 Angular 코드는 error
블록을 트리거하고 다음 메시지를 제공합니다.
http://10.0.1.19/api/login에 대한 구문 분석 중 HTTP 실패
백엔드에서 빈 배열을 반환하면 작동합니다 ... 그래서 Angular가 내 응답을 JSON으로 구문 분석하려고합니까? 어떻게 비활성화 할 수 있습니까?
.NET Framework를 사용하여 반환 할 데이터가 JSON 이 아님 을 지정할 수 있습니다 responseType
.
귀하의 예에서 다음 과 같이 responseType
문자열 값을 사용할 수 있습니다 text
.
return this.http.post(
'http://10.0.1.19/login',
{email, password},
{responseType: 'text'})
다른 옵션은 json
(기본값) arraybuffer
및 blob
.
자세한 정보 는 문서 를 참조하십시오.
옵션이 있다면
return this.http.post(`${this.endpoint}/account/login`,payload, { ...options, responseType: 'text' })
responseType을 추가해도 성공하지 못한 채 며칠 동안 처리했습니다. 마침내 나는 그것을 얻었다. 백엔드 스크립트에서 헤더를-( "Content-Type : application / json);으로 정의하지 않았는지 확인하십시오.
텍스트로 바꾸지 만 백엔드에서 json을 요청하면 오류가 반환됩니다.
Angular 응용 프로그램에서 동일한 문제에 직면했습니다. 내 응용 프로그램에서 RocketChat REST API를 사용하고 있었고를 사용하려고 rooms.createDiscussion
했지만 아래와 같은 오류가 발생했습니다.
ERROR Error: Uncaught (in promise): HttpErrorResponse: {"headers":{"normalizedNames":{},"lazyUpdate":null},"status":200,"statusText":"OK","url":"myurl/rocketchat/api/v1/rooms.createDiscussion","ok":false,"name":"HttpErrorResponse","message":"Http failure during parsing for myrul/rocketchat/api/v1/rooms.createDiscussion","error":{"error":{},"text":"
나는 변경과 같은 몇 가지를 시도했지만 responseType: 'text'
그들 중 어느 것도 작동하지 않았습니다. 결국 RocketChat 설치에 문제가 있음을 알 수있었습니다. RocketChat 변경 로그 에서 언급했듯이 API rooms.createDiscussion
는 버전 1.0.0에서 도입되었습니다. 아쉽게도 낮은 버전을 사용하고있었습니다.
내 제안은 Angular 코드의 오류를 수정하는 데 시간을 보내기 전에 REST API가 제대로 작동하는지 확인하는 것입니다. 나는 그것을 curl
확인하기 위해 명령을 사용 했다.
curl -H "X-Auth-Token: token" -H "X-User-Id: userid" -H "Content-Type: application/json" myurl/rocketchat/api/v1/rooms.createDiscussion -d '{ "prid": "GENERAL", "t_name": "Discussion Name"}'
거기에서도 응답으로 잘못된 HTML을 받았습니다.
<!DOCTYPE html>
<html>
<head>
<meta name="referrer" content="origin-when-crossorigin">
<script>/* eslint-disable */
'use strict';
(function() {
var debounce = function debounce(func, wait, immediate) {
다음과 같이 유효한 JSON 응답 대신.
{
"discussion": {
"rid": "cgk88DHLHexwMaFWh",
"name": "WJNEAM7W45wRYitHo",
"fname": "Discussion Name",
"t": "p",
"msgs": 0,
"usersCount": 0,
"u": {
"_id": "rocketchat.internal.admin.test",
"username": "rocketchat.internal.admin.test"
},
"topic": "general",
"prid": "GENERAL",
"ts": "2019-04-03T01:35:32.271Z",
"ro": false,
"sysMes": true,
"default": false,
"_updatedAt": "2019-04-03T01:35:32.280Z",
"_id": "cgk88DHLHexwMaFWh"
},
"success": true
}
따라서 최신 RocketChat으로 업데이트 한 후 언급 된 REST API를 사용할 수있었습니다.
You should also check you JSON (not in DevTools, but on a backend). Angular HttpClient having a hard time parsing JSON with \0
characters and DevTools will ignore then, so it's quite hard to spot in Chrome.
Based on this article
참고URL : https://stackoverflow.com/questions/46408537/angular-httpclient-http-failure-during-parsing
'program tip' 카테고리의 다른 글
서비스에서 애플리케이션 매개 변수에 액세스하는 방법은 무엇입니까? (0) | 2020.11.07 |
---|---|
두 개 이상의 인수에 대한 Numpy`logical_or` (0) | 2020.11.07 |
jquery에! important를 포함하는 방법 (0) | 2020.11.07 |
ResultSet 예외-결과 세트 시작 전 (0) | 2020.11.07 |
Mysql 1050 오류 "테이블이 이미 있습니다." (0) | 2020.11.07 |