Angular

En Angular, a menudo necesitamos enviar información a nuestros servidores. Cuando se trata de enviar datos de formularios, especialmente si incluyen archivos, FormData es nuestro mejor aliado. Veamos cómo usarlo de forma sencilla.

¿FormData, Qué es? Imagínalo como un sobre…

Piensa en FormData como un sobre donde puedes meter diferentes «papelitos» con información (campos del formulario) y también archivos. Luego, envías este sobre a la API.

El «Sobre» FormData

Imagina FormData como un sobre digital donde pones los datos que necesitas enviar.

let formData = new FormData();
formData.append('grant_type', 'client_credentials');
formData.append('client_id', 'cliente_r4u_1k_afwMWN4MyQi.');
formData.append('client_secret', '4B1D3963A04E4E8270BAD09EE2CF');
formData.append('username', 'user@user.com');
formData.append('password', 'holasoylacontraseña');

Aquí, new FormData() crea un «sobre» vacío. Luego, usamos formData.append('nombre_del_campo', 'valor') para añadir cada dato importante:

'username' y 'password': Las credenciales del usuario para iniciar sesión.

'grant_type': Indica el tipo de autorización que estamos solicitando (en este caso, client_credentials, aunque también vemos username y password, lo que podría indicar otro tipo de flujo).

'client_id' y 'client_secret': Son identificadores únicos de nuestra aplicación, como una llave secreta para acceder a la API.

Enviando con HttpClient

Angular usa HttpClient para hablar con APIs. Para enviar nuestro FormData, lo pasamos en la petición POST:

TypeScript

import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { environment } from 'src/environments/environment';
import { take } from 'rxjs/operators';

interface Token { access_token: string; /* ... */ }

@Injectable({ providedIn: 'root' })
export class AuthService {
  constructor(private http: HttpClient) { }

  obtenerToken() {
    let formData = new FormData();
    formData.append('grant_type', 'client_credentials');
    formData.append('client_id', '...');
    formData.append('client_secret', '...');
    formData.append('username', '...');
    formData.append('password', '...');

    return this.http.post<Token>;(environment.middleware, formData).pipe(take(1));
  }
}

El truco está en pasar formData como segundo argumento de http.post. Angular se encarga del resto.

Recibiendo la Respuesta

Así manejamos la respuesta (token exitoso o error):

this.authService.obtenerToken().subscribe({
  next: (token) => {
    console.log('Token:', token.access_token);
    // Guardar token
  },
  error: (error) => {
    console.error('Error:', error);
    // Manejar error
  },
  complete: () => {
    // Acciones al finalizar
  }
});

¿Por qué FormData?

Aunque aquí no hay archivos, FormData es un estándar flexible para enviar datos de formulario. Algunas APIs lo prefieren, incluso para texto.

Extra

No hace mucho me pidieron que esta misma llamada pasará los datos como parámetros y para esto usaremos un map para facilitarnos las cosas

const formDataInfo: any = {
      grant_type: 'client_credentials',
      client_id: '9Z7z2r8r8c',
      client_secret: 'abcdef',
      username: 'sinecesitamosuser@user.com',
      password: 'PvuCurJCfLxvxb1MqapCW'

    }
    let str = Object.keys(Hdata).map(function (key) {
      return key + '=' + Hdata[key];
    }).join('&');

por Cesar Flores

Programador de tiempo completo, Gamer de medio tiempo y fotógrafo ocasionalmente, me gusta el front-end y mi framework favorito es angular aunque no por eso le hago el feo a un nuevo lenguaje.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.