Cómo realizar solicitudes HTTP en Node.js con node-fetch

Como Realizar Solicitudes Http En Node Js Con Node Fetch



Las solicitudes HTTP son cruciales y están diseñadas para obtener información de las URL de forma global, es decir, invocar un sitio web, etc. Este enfoque entra en vigor cuando una aplicación web necesita establecer comunicación con los servidores web para acceder a los recursos. Por ejemplo, recuperar o publicar datos en un servidor web o API.

En JavaScript, se puede realizar a través del botón ' ventana.fetch() ' método. Sin embargo, en “ nodo.js ”, esta funcionalidad se puede lograr utilizando múltiples paquetes, es decir, node-fetch, etc.

Este blog explica las siguientes áreas de contenido:







¿Qué es la “búsqueda de nodos”?

El ' búsqueda de nodo ”corresponde a un módulo liviano que hace que la API de recuperación sea accesible para node.js. Este módulo también permite a los usuarios utilizar el ' buscar() 'método en node.js que es en su mayoría similar al JavaScript' ventana.fetch() ' método.



Sintaxis (método fetch())



buscar ( URL [ , opciones ] ) ;

En esta sintaxis:





  • URL ”se refiere a la URL del recurso que debe buscarse/recuperarse.
  • El ' opciones El parámetro 'es necesario cuando es necesario utilizar el método' fetch() 'además de hacer un' CONSEGUIR ' pedido.

Valor de retorno

Esta función recupera un objeto Respuesta que comprende información sobre una respuesta HTTP de la siguiente manera:



  • texto: Recupera el cuerpo de la respuesta en forma de cadena.
  • encabezados: Devuelve un objeto que comprende los controladores de respuesta.
  • json(): Analiza el cuerpo de la respuesta en un objeto JSON.
  • texto de estado/estado: Comprende la información relativa al código de estado HTTP.
  • OK: Da ' verdadero ”si el estado es un código de estado 2xx.

Requisitos previos para utilizar la búsqueda de nodos

Los siguientes son los requisitos previos que se deben considerar antes de comenzar con “ búsqueda de nodo ”:

  • Instalado al menos o la última versión 17.5.
  • Conocimientos básicos de JavaScript.

¿Cómo realizar solicitudes HTTP en node.js con node-fetch?

Realizar solicitudes HTTP es un procedimiento asincrónico ya que recibir la respuesta solicitada lleva algún tiempo. Es tal que puede haber dos metodologías para utilizar los procedimientos asincrónicos. La primera es que el usuario puede esperar la respuesta y luego continuar con el código. El otro está ejecutando el código en paralelo.

¿Cómo empezar con la búsqueda de nodos?

Antes de comenzar o instalar el “ búsqueda de nodo ”, inicialice un proyecto de nodo con la ayuda del siguiente comando:

inicio npm - y

La ejecución de este comando crea un ' paquete.json ”archivo en el directorio actual, de la siguiente manera:

Ahora, instale el ' búsqueda de nodo ”módulo usando el siguiente cmdlet:

nodo de instalación npm - buscar

Sin embargo, para instalar una versión del módulo de destino, utilice el siguiente comando:

nodo de instalación npm - buscar@ 2.0

En este caso, el “ 2.0 Se instalará la versión ”del módulo.

Nota: Antes de continuar con los ejemplos, cree un “ index.mjs ”archivo en el espacio de trabajo que se utilizará para aplicar las funcionalidades.

Ejemplo 1: Enviar solicitudes de obtención a través de node-fetch

El ' búsqueda de nodo El módulo 'se puede utilizar para obtener texto de un servidor web o los datos a través de Rest API.

El siguiente ejemplo de código escrito en el “creado” index.mjs ”El archivo realiza una solicitud de obtención simple a la página de inicio de YouTube:

importar buscar de 'búsqueda de nodo' ;

buscar ( 'https://youtube.com' )

  . entonces ( res => res. texto ( ) )

  . entonces ( texto => consola. registro ( texto ) ) ;

En estas líneas de código:

  • Carga el ' búsqueda de nodo 'Módulo y recupere la página de inicio de YouTube a través de la URL especificada a la que se realiza la solicitud HTTP.
  • Después de eso, encadene el “ entonces() ”Métodos para manejar la respuesta y los datos de la solicitud realizada.
  • El antiguo método “then()” indica esperar a recibir la respuesta del servidor de YouTube y transformarla a formato de texto.
  • El último método “then()” significa esperar el resultado de la transformación anterior y lo muestra en la consola.

Producción

Ahora, ejecute el código mediante el siguiente cmdlet:

índice de nodo. mjs

La ejecución del comando anterior da como resultado la recuperación del formato HTML completo de la página de inicio de YouTube que se muestra en la consola:

Ejemplo 2: Recuperar datos JSON de la API Rest

Este ejemplo utiliza “ búsqueda de nodo ”para obtener datos falsos a través del JSONMarcador de posición RestAPI. Es tal que el “ buscar() El método 'comprende la URL del servidor y espera una respuesta:

importar buscar de 'búsqueda de nodo' ;

buscar ( 'https://jsonplaceholder.typicode.com/users' )

  . entonces ( res => res. json ( ) )

  . entonces ( json => {

consola. registro ( 'Primer usuario de matriz -> ' ) ;

consola. registro ( json [ 0 ] ) ;

consola. registro ( 'Nombre de usuario del primer arreglo -> ' ) ;

consola. registro ( json [ 0 ] . nombre ) ;

} )

De acuerdo con este bloque de código, realice los siguientes pasos:

  • El cuerpo HTTPS comprende datos con formato JSON que contienen los datos del usuario.
  • Después de eso, el “ json() 'La función se aplica para invocar las entradas individuales y los valores correspondientes.

Producción

Aplique el cmdlet que se indica a continuación para ejecutar el código:

índice de nodo. mjs

Ejemplo 3: Solicitudes de publicación mediante búsqueda de nodo

El ' búsqueda de nodo El módulo 'también se puede utilizar para publicar las solicitudes en lugar de recuperarlas. Esto se puede lograr a través del “ buscar() 'Método que incluye un parámetro adicional para realizar solicitudes POST a un servidor.

Hay múltiples opciones que se pueden asignar con este parámetro. Sin embargo, en este caso, el “ método ”, “ cuerpo ' y ' encabezados ' se utilizará. A continuación se muestra la descripción de cada una de las opciones:

  • El ' método La opción 'establece el tipo de solicitudes HTTP, es decir, 'POST' en este escenario.
  • El ' cuerpo La opción ”comprende el cuerpo de la solicitud.
  • El ' encabezamiento La opción 'contiene todos los encabezados requeridos, es decir, ' Tipo de contenido ' en este escenario.

Ahora, pase a la implementación práctica del envío de solicitudes de publicación agregando un nuevo elemento al marcador de posición JSON ' todos ”. Se hace agregando un nuevo elemento a la lista que tenga el ID de usuario '476':

importar buscar de 'búsqueda de nodo' ;

let todo = {

ID de usuario : 476 ,

sitio : 'Esto es Linuxhint' ,

terminado : FALSO

} ;

buscar ( 'https://jsonplaceholder.typicode.com/todos' , {

método : 'CORREO' ,

cuerpo : JSON. encadenar ( todo ) ,

encabezados : { 'Tipo de contenido' : 'aplicación/json' }

} ) . entonces ( res => res. json ( ) )

  . entonces ( json => consola. registro ( json ) ) ;

En este código:

  • En primer lugar, cree un objeto de tarea pendiente y transfórmelo a JSON mientras lo agrega al cuerpo.
  • Ahora, de la misma manera, especifique la URL con las opciones requeridas como ' buscar() ”Parámetros opcionales del método.
  • Después de eso, aplique el “ JSON.stringify() 'Método para transformar el objeto en una cadena formateada (JSON) antes de enviarlo/transmitirlo al servidor web.
  • En el futuro, implementar el sistema combinado “ entonces() ”Métodos para recuperar los datos esperando la respuesta, transformándolos a JSON e iniciando sesión en la consola, respectivamente.

Producción

Ejecute el comando que se proporciona a continuación para ejecutar el código:

índice de nodo. mjs

¿Qué son los códigos de estado HTTP?

Antes de continuar con el siguiente ejemplo, asegúrese de que si la respuesta comprende un ' 3xx ”código de estado, el cliente debe realizar los pasos adicionales. Asimismo, el “ 4xx Los códigos 'representan una solicitud no válida y el' 5xx Los códigos corresponden a los errores del servidor.

Nota: El ' atrapar() La función ”no puede hacer frente a los casos mencionados anteriormente ya que la comunicación con el servidor se realiza de manera simplificada. Por lo tanto, un enfoque eficaz para garantizar que las solicitudes fallidas devuelvan el error es definir una función que analice el estado HTTP de la respuesta del servidor.

Ejemplo 4: Cómo afrontar excepciones y limitaciones

Puede haber varias limitaciones o excepciones con las solicitudes enviadas, es decir, problemas con Internet '. buscar() ”limitaciones de funciones, etc. Estas excepciones se pueden manejar agregando el “ atrapar() ' función:

función analizarEstado ( X ) {

  si ( X. OK ) {

    devolver X

  } demás {

tirar nuevo Error ( `Estado HTTP con respecto a la respuesta -> $ { X. estado } ( $ { X. estadoTexto } ) ` ) ;

}

}

buscar ( 'https://jsonplaceholder.typicode.com/MissingResource' )

  . entonces ( analizarEstado )

  . entonces ( X => X. json ( ) )
 
  . entonces ( json => consola. registro ( json ) )

  . atrapar ( errar => consola. registro ( errar ) ) ;

En este fragmento de código:

  • Primero, defina una función que tenga el parámetro indicado antes de analizar la respuesta para hacer frente a las limitaciones encontradas.
  • Ahora, incluya el “ si/si no ”declaraciones para arrojar el error encontrado o una limitación personalizada.
  • Después de eso, de manera similar, aplique el “ buscar() ” y los métodos asociados “then()” para recuperar los datos esperando la respuesta, transformándola a JSON e iniciando sesión en la consola.
  • Por último, las excepciones de tiempo de ejecución se pueden solucionar colocando el botón ' atrapar() ”Método al final de la cadena de promesa.

Producción

Por último, ejecute el cmdlet que se proporciona a continuación para ejecutar el código y generar las excepciones encontradas:

índice de nodo. mjs

Otros casos de uso de 'búsqueda de nodos'

El ' búsqueda de nodo 'También se puede utilizar para hacer' Solicitudes de API ' o ' Raspado web ”. Analicemos estos casos de uso en detalle.

Utilización de node-fetch para realizar solicitudes de API

La API puede ser necesaria en varios escenarios para recuperar los datos de destino a través de una fuente de back-end. Las solicitudes HTTP pueden tener muchos métodos de autenticación, como utilizar una clave API donde el proveedor de API proporciona una clave que está limitada únicamente al usuario. Otro método para proteger la API puede ser a través de ' Autenticación básica ”en el que se debe enviar un encabezado para invocar la API.

A continuación se muestra la demostración del último enfoque, es decir, 'Autenticación básica' en la solicitud posterior con la ayuda de ' buscar() ' método:

( asíncrono ( ) => {

  constante X = esperar a buscar ( 'http://httpbin.org/post' , {

método : 'CORREO' ,

encabezados : {

    'Autorización' : `Básico $ { hermano ( 'contraseña de inicio de sesión' ) } `

  } ,

cuerpo : JSON. encadenar ( {

    'llave' : 'valor'

    } )

  } ) ;

  constante resultado = espera x. texto ( ) ;

consola. registro ( resultado ) ;

} ) ( ) ;

En la demostración anterior, se envía un encabezado con un ' base64 'cadena codificada del formato' contraseña de inicio de sesión ”.

Utilización de node-fetch para Web Scraping

Raspado web 'Se refiere a la técnica en la que los datos/contenido se obtienen de los sitios y se analizan. Este análisis se logra a través del “ animar ' biblioteca.

A continuación se muestra la demostración de cómo obtener el título de la página a través del botón ' buscar() 'método y' animar ' biblioteca:

constante biblioteca = requerir ( 'alegría' ) ;

( asíncrono ( ) => {

  constante X = esperar a buscar ( 'https://linuxhint.com/' ) ;

  constante y = espera x. texto ( ) ;

  constante $ = lib. carga ( y ) ;

consola. registro ( $ ( 'título' ) . primero ( ) . texto ( ) ) ;

} ) ( ) ;

Este ejemplo recupera el mosaico de ' linux ”título del sitio.

Conclusión

Las solicitudes HTTP en node.js se pueden realizar con node-fetch enviando solicitudes de obtención, recuperando datos JSON de la API REST o enviando solicitudes de publicación. Además, las excepciones y limitaciones se pueden manejar de manera efectiva a través del ' atrapar() ' función.