world tutorial starter hello guide cli app angular typescript angular-httpclient

tutorial - Angular HttpClient "Error de Http durante el análisis"



install angular 2 (4)

Intento enviar una solicitud POST de Angular 4 a mi backend de Laravel.

Mi LoginService tiene este método:

login(email: string, password: string) { return this.http.post(`http://10.0.1.19/login`, { email, password }) }

Me suscribo a este método en mi LoginComponent:

.subscribe( (response: any) => { console.log(response) location.reload() }, (error: any) => { console.log(error) })

Y este es mi método de back-end de Laravel:

... if($this->auth->attempt([''email'' => $email, ''password'' => $password], true)) { return response(''Success'', 200); } return response(''Unauthorized'', 401);

Mis herramientas de desarrollo de Chrome dicen que mi solicitud fue exitosa con el código de estado 200. Pero mi código angular activa el bloque de error y me da este mensaje:

Error de HTTP durante el análisis de http://10.0.1.19/api/login

Si devuelvo una matriz vacía de mi back-end, funciona ... ¿Entonces Angular está tratando de analizar mi respuesta como JSON? ¿Cómo puedo desactivar esto?


Estaba enfrentando el mismo problema en mi aplicación Angular. Estaba usando RocketChat REST API en mi aplicación e intentaba usar rooms.createDiscussion , pero como un error como se muestra a continuación.

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":"

He intentado un par de cosas como cambiar el responseType: ''text'' pero ninguno funcionó. Al final pude encontrar que el problema estaba en mi instalación de RocketChat. Como se menciona en el registro de cambios de RocketChat, la API rooms.createDiscussion se introdujo en la versión 1.0.0, desafortunadamente estaba usando una versión inferior.

Mi sugerencia es verificar que la API REST esté funcionando bien o no antes de pasar tiempo para corregir el error en su código Angular. curl comando curl para verificar eso.

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"}''

Allí también recibí un HTML no válido como respuesta.

<!DOCTYPE html> <html> <head> <meta name="referrer" content="origin-when-crossorigin"> <script>/* eslint-disable */ ''use strict''; (function() { var debounce = function debounce(func, wait, immediate) {

En lugar de una respuesta JSON válida de la siguiente manera.

{ "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 }

Entonces, después de actualizar al último RocketChat , pude usar la API REST mencionada.


Incluso agregando responseType, lo traté durante días sin éxito. Finalmente lo tengo. Asegúrese de que en su script de backend no defina el encabezado como - ("Content-Type: application / json);

Porque si lo convierte en texto pero el backend solicita json, le devolverá un error ...


Puede especificar que los datos que se devolverán no sean JSON utilizando el responseType .

En su ejemplo, puede usar un valor de cadena de text responseType , como este:

return this.http.post( ''http://10.0.1.19/login'', {email, password}, {responseType: ''text''})

Otras opciones son json (el valor predeterminado), arraybuffer y blob .

Vea los docs para más información.


si tienes opciones

return this.http.post(`${this.endpoint}/account/login`,payload, { ...options, responseType: ''text'' })