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