bookpaso1b - keblato/TutorialesTalleres-Angular GitHub Wiki

Book - paso 1b

Puede comenzar por hacer un checkout del release del paso-1b del repositorio del front.

Para ello, abra Visual Studio Code y desde el terminal integrado ejecute el siguiente comando:

git checkout -f paso-1b

Vuelva a ejecutar el comando para instalar los paquetes necesarios:

npm install

Puede correr la aplicación con el comando:

ng serve

Si accede a localhost:4200 verá que el BookStore está vacío, es decir que aparentemente no hay ni libros, autores ni editoriales:

Paso1bBSVacio
Figura 1: BookStore vacío

Esto se debe a que la aplicación ya no está compuesta únicamente por el proyecto del front en Angular, sino que ahora cuenta con un back desarrollado en Node.js. Este se encuentra en otro repositorio que deberá clonar en un directorio diferente.

Ejecución del back

URL: https://github.com/Uniandes-isis2603/node_backstepbystep
Release: git checkout -f paso-1

En un directorio diferente, clone el repositorio que contiene el back.

git clone https://github.com/Uniandes-isis2603/node_backstepbystep

Haga checkout del release del paso-1:

git checkout -f paso-1

Instale los paquetes necesarios:

npm install

Y lance el back con el comando:

npm start

Paso1bBackStart
Figura 2: ejecución del back

Si refresca el navegador en localhost:4200 verá que el BookStore vuelve a mostrar los libros, los autores y las editoriales

Paso1bBS
Figura 3: el BookStore muestra los datos traídos del back

El back

El back está desarrollado en Node.js, funciona como un API REST y su estructura es la siguiente:

EstructuraBack
Figura 4: estructura del back

Diseño global del back

En el diagrama a continuación se muestra el diseño del back:

diagrama
Figura 5: diseño global del back

El back se divide en tres elementos principales: app.js, los controladores y los servicios.

app.js

El archivo app.js es la base del back.

appjs
Figura 6: app.js

El back importa tres paquetes esenciales:

  • express: un framework para aplicaciones web
express
Figura 7: express
  • body-parser: que permitirá trabajar con las peticiones que llegan al API REST
body-parser
Figura 8: body-parser
  • cors: que esencialmente se encarga de permitir que se acepten peticiones provenientes de otras direcciones
cors
Figura 9: cors

Si es de su interés, puede revisar la documentación de cada uno de estos paquetes en npm haciendo click en el nombre de cada uno de ellos.

El puerto para recibir las peticiones está definido como el 8000. Puede cambiarlo, pero no debe olvidar modificarlo también el proyecto del front en los archivos ubicados en el directorio src/environments. Esto se explicará en una sección más adelante.

En este archivo también se definen los 3 controladores que atenderán las peticiones REST (authorsController, booksController y editorialController).

De igual forma, se define una ruta base para las peticiones /bookstore/api.

Los controladores

Estos están ubicados en el directorio /app/controllers y se nombran de acuerdo a nombre.ctrl.js. Estos tienen la responsabilidad de implementar el API REST.

La estructura de un controlador se muestra a continuación:

booksctrl
Figura 10: books.ctrl.js

El paquete express para el manejo de la aplicación, y en especial para utilizar su router y poder definir las rutas del API REST.

En este caso, cada controlador solo cuenta con una ruta que se encarga de devolver las lista de libros, autores y editoriales.

Para ello, los controladores definen la ruta de la petición get, por ejemplo /books, /authors y /editorials. Es decir que para hacer un get de la lista de libros se debe hacer una petición /bookstore/api/books (la ruta base del app.js + la definida en el controlador).

El router permite obtener la petición req (request - que en este caso no se utiliza) y lo que será la respuesta del back res.

Por medio del servicio booksService, el controlador obtiene la lista de libros, le asigna el código de estado 200 a la respuesta (que significa que la petición se ejecutó correctamente) y envía la lista.

Nota: para más información sobre los códigos de estado puede revisar el link haciendo click.

Los servicios

Estos están ubicados en el directorio /app/services y se nombran de acuerdo con nombre.srv.js.

Los servicios se encargan de la lógica y la persistencia, es decir de realizar las operaciones en la base de datos y de devolver a los controladores los resultados de estas.

La estructura básica se muestra en esta imagen:

bookssrv
Figura 11: books.srv.js

Los servicios definen métodos que reciben típicamente los parámetros que necesitan para las búsquedas en la base de datos y dos promesas success y error que se encargarán de informar al controlador si hubo o no problemas con los queries en la base de datos.

Para efectos de simplicidad en este paso, aún no se cuenta con una base de datos, sino que la lista de libros que retorna el servicio es el mismo archivo .json que en el paso-1a se obtenía directamente en los servicios del proyecto del front.

Conexión del front y el back

Después de haber hecho el checkout del release paso-1b del repositorio del front, verá que los servicios de cada módulo cambiaron ligeramente.

Ahora, los servicios importan el archivo environment (ubicado en src/environments) para poder obtener la ruta del back (API_URL) y tienen una variable para acceder a los recursos correspondientes. En el caso del book.service.ts, el cambio se refleja así:

booksrv1b
Figura 12: conexión front - back

De esta forma, cada servicio hace la petición al API REST para obtener la lista de libros, autores o editoriales, para luego transmitírsela a los componentes a través del Observable que se explicó en el paso-1a.

En el paso siguiente paso-1c se empezará a utilizar una base de datos mysql.