• Saltar a la navegación principal
  • Saltar al contenido principal

JAVIER GUTIÉRREZ

Desarrollador web

  • Newsletter
  • Blog
  • Acerca de mí

Cómo hacer una consulta a una API externa y renderizar el contenido con Express, Request y Handlebars

Express es un Framework minimalista para node, el cual nos provee de ligeras y robustas herramientas para servidores HTTP. Es una gran solución para implementar Single Pages Applications, Web Sites, Hibrids o Publics APIs.
Request es un módulo para hacer llamadas por HTTP, en este caso se usará para hacer llamadas a la REST API de JSONPlaceholder para obtener datos de prueba.
Y Handlebars es una extensión del motor de plantillas Mustache, el cual mantiene vista y código por separado. En este caso utilizaré el Módulo Express Handlebars, un motor de vistas para Express.

Tabla de contenidos

  1. Requisitos
    1. Crear un proyecto e instalar los módulos express, express-handelbars y request
      1. Estructura de directorios y archivos
        1. index.js:
          1. views/layouts/main.handlebars:
            1. views/home.handlebars:
              1. views/zipcodes.handlebars:
              2. Ejecución
                1. Enlaces

                  Requisitos

                  Los requisitos de la aplicación son los siguientes:

                  • Crear un servidor.
                  • Recibir datos de una API externa.
                  • Renderizar esos datos según la petición del cliente

                  Aquí dejo un pequeño esquema con los pasos a seguir:

                  Comenzamos…

                  Crear un proyecto e instalar los módulos express, express-handelbars y request

                  Debes tener Node instalado en tu máquina, en mi caso estoy trabajando con la versión 12.17. Colócate en la carpeta donde vas a crear tu proyecto y ejecuta el siguiente comando:

                  Shell
                  /proyect-name/

                  Responde a las preguntas confirmando las respuestas por defecto. Esto creará la carpeta de módulos de NODEJS y el archivo package.json con las dependencias de los módulos que vayas agregando.

                  Una vez creada la aplicación, debes añadir los módulos que vas a utilizar junto con la opción ‘save’ para que sean guardados en el archivo package.json:

                  Shell

                  Estructura de directorios y archivos

                  Debes crear los siguientes archivos y carpetas para que la aplicación funcione correctamente:

                  .
                  ├── index.js
                  └── views
                      ├── home.handlebars
                      └── layouts
                          ├── main.handlebars
                          └── zipcodes.handlebars
                  
                  2 carpetas, 4 archivos

                  index.js:

                  Carga los módulos que vas a utilizar y crea la aplicación:

                  JS

                  Indica el motor de plantilla a utilizar y genera la variable en Express:

                  JS

                  En el siguiente fragmento de código se crean las dos rutas de la aplicación, «/» y «/zipcodes» Dentro de cada ruta y se hace una llamada a la API para seguiamente convertir los datos a JSON y almacenarlos en la variable users . Por último se renderiza la vista indicandole el layout a utilizar y pasándole el objeto users como parámetro:

                  JS

                  Por último se le añade la siguiente línea para poder escuchar la aplicación desde el navegador desde el puerto indicado, en mi caso localhost:3000 :

                  JS

                  views/layouts/main.handlebars:

                  El layout principal (main layout) es la página HTML que envuelve a las distintas vistas (views) de la aplicación. {{{body}}} es el lugar donde el contenido (home.handlebars y zipcodes.handlebars) va a ser renderizado.

                  HTML

                  El layout consta de un <head> con metadatos y un <body> con un <header> y un <footer>. Este layoyt se repetirá cada vez que se renderice una ruta con la vista que se le indique. El contenido aparecerá en {{{body}}}.

                  views/home.handlebars:

                  El contenido de la vista home es renderizado dentro del layout justo donde hemos situado el {{{body}}}.

                  HTML

                  En este archivo ocurren varias cosas:

                  • Se usa el built-in helper #if para comprobar que existe el objeto users.
                  • Y #each para iterar users creando una lista con el nombre y el email de cada usuario.
                  • Recordar que el objeto users lo hemos pasado como parámetro desde index.js.

                  views/zipcodes.handlebars:

                  En este archivo se realizan las mismas operaciones que en el anterior, pero creando la lista con el nombre y el código postal del usuario.

                  HTML

                  Ejecución

                  Ya sólo queda ejecutar el archivo index.js desde la línea de comandos y visualizar la aplicación desde el navegador desde la dirección localhost:3000.

                  Shell

                  Enlaces

                  • Introducción a Express/Node (MDN)
                  • Framework Express para node
                  • Express Handlebars
                  • Módulo request

                  Archivado en: Node

                  Interacciones con los lectores

                  Comentarios

                  1. Armando Martínez dice

                    08/02/2022 en 20:29

                    Hola Sr. Javier,
                    Quisiera hacer una pregunta sobre este tema que estoy aprendiendo.
                    Desarrollé la API con nodejs express, handlebars y no logro mostrar los datos en la vista.
                    Consultando la api desde postman me trae lo siguiente:
                    [
                    {
                    «id»: 1,
                    «codlinea»: «1»,
                    «nombre»: «uno»,
                    «estado»: «activo»,
                    «fecha_alta»: «2022-01-19T16:17:18.000Z»,
                    «fecha_modificacion»: null
                    },
                    {
                    «id»: 2,
                    «codlinea»: «005»,
                    «nombre»: «cero cero cinco»,
                    «estado»: «activo»,
                    «fecha_alta»: «2022-01-24T20:35:24.000Z»,
                    «fecha_modificacion»: null
                    },
                    {
                    «id»: 5,
                    «codlinea»: «10»,
                    «nombre»: «diez»,
                    «estado»: «activo»,
                    «fecha_alta»: «2022-01-26T16:28:03.000Z»,
                    «fecha_modificacion»: null
                    },
                    {
                    «id»: 6,
                    «codlinea»: «6»,
                    «nombre»: «seis»,
                    «estado»: «activo»,
                    «fecha_alta»: «2022-01-26T16:30:19.000Z»,
                    «fecha_modificacion»: null
                    },
                    {
                    «id»: 7,
                    «codlinea»: «15»,
                    «nombre»: «quince»,
                    «estado»: «»,
                    «fecha_alta»: «2022-01-27T15:41:46.000Z»,
                    «fecha_modificacion»: null
                    },
                    {
                    «id»: 8,
                    «codlinea»: «16»,
                    «nombre»: «disciseis»,
                    «estado»: «»,
                    «fecha_alta»: «2022-01-27T15:44:18.000Z»,
                    «fecha_modificacion»: null
                    },
                    {
                    «id»: 9,
                    «codlinea»: «17»,
                    «nombre»: «diecisiete»,
                    «estado»: «»,
                    «fecha_alta»: «2022-01-27T15:46:49.000Z»,
                    «fecha_modificacion»: null
                    },
                    {
                    «id»: 10,
                    «codlinea»: «18»,
                    «nombre»: «dieciocho»,
                    «estado»: «»,
                    «fecha_alta»: «2022-01-27T15:55:55.000Z»,
                    «fecha_modificacion»: null
                    },
                    {
                    «id»: 11,
                    «codlinea»: «19»,
                    «nombre»: «diesinueve»,
                    «estado»: «»,
                    «fecha_alta»: «2022-01-27T16:03:53.000Z»,
                    «fecha_modificacion»: null
                    },
                    {
                    «id»: 12,
                    «codlinea»: «20»,
                    «nombre»: «veinte»,
                    «estado»: «»,
                    «fecha_alta»: «2022-01-27T16:17:46.000Z»,
                    «fecha_modificacion»: null
                    },
                    {
                    «id»: 13,
                    «codlinea»: «2»,
                    «nombre»: «dos»,
                    «estado»: «»,
                    «fecha_alta»: «2022-02-04T23:13:48.000Z»,
                    «fecha_modificacion»: null
                    },
                    {
                    «id»: 14,
                    «codlinea»: «3»,
                    «nombre»: «tres»,
                    «estado»: «»,
                    «fecha_alta»: «2022-02-04T23:14:40.000Z»,
                    «fecha_modificacion»: null
                    },
                    {
                    «id»: 15,
                    «codlinea»: «4»,
                    «nombre»: «cuatro»,
                    «estado»: «»,
                    «fecha_alta»: «2022-02-04T23:15:33.000Z»,
                    «fecha_modificacion»: null
                    },
                    {
                    «id»: 16,
                    «codlinea»: «7»,
                    «nombre»: «siete»,
                    «estado»: «»,
                    «fecha_alta»: «2022-02-04T23:17:01.000Z»,
                    «fecha_modificacion»: null
                    }
                    ]

                    Pero no logro mostrar aún cuando le puse la misma sintaxis que aquí usted amablemente enseña.

                    Desde ya muchas gracias!!!

                    Responder
                    • Jose Tercero dice

                      21/10/2022 en 20:03

                      ¿Ya resolviste bro?

                      Responder

                  Responder a Armando Martínez Cancelar la respuesta

                  Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

                  This site uses Akismet to reduce spam. Learn how your comment data is processed.

                  Copyright © 2025 · Genesis Sample on Genesis Framework · WordPress · Iniciar sesión

                  Usamos cookies para asegurar que te damos la mejor experiencia en nuestra web. Si continúas usando este sitio, asumiremos que estás de acuerdo con ello.AceptarPolítica de privacidad