Open Source @ UNA

Repositorio Open Source de documentación en nuevas tecnologías


Project maintained by tfg2021-escinf-una Hosted on GitHub Pages — Theme by mattgraham

Regresar

Setup

En el siguiente link encontrará el repositorio creado para este ejemplo práctico: https://github.com/tfg2021-escinf-una/eg.geocities.management/tree/development . En caso de tener alguna duda con el código, puede revisar directamente en el repositorio, o bien, clonarlo y modificarlo.

  1. Abrir el repositorio microservices-tutorial/geocities-microservice en el editor de texto

  2. En este momento la lista de archivos en el proyecto es la siguiente:

microservices-tutorial
│
└─── geocities-microservice
│   │   README.md
│   │   .gitignore
  1. (Opcional) Para inicializar este proyecto de TypeScript, utilizamos el NX Framework. Este pone en practica un término llamado monorepositorio.
    • Para crear la estructura puede utilizar el siguiente comando npx create-nx-workspace@latest
    • La consola va a ir indicando las opciones a seleccionar para crear la solucion necesaria.
  2. Para la ejecucion de este proyecto, recomendamos descargar el repositorio adentro de la estructura anteriormente descrita.
    • Esto lo puede realizar mediante la utilización de git
    • Link al repo

Análisis de la estructura del repositorio.

microservices-tutorial
│
└─── geocities-microservice
│   │   apps
│   │   deployment
│   │   libs
│   │   tools
│   │   README.md
│   │   .gitignore

Análisis de la estructura dentro de apps.

apps
└─── geography
│   │   src
│   │   │   main.ts
│   │   │   app
│   │   │   │   controllers
│   │   │   │   routes
│   │   │   │   utils

Ejemplo de una funcion del controlador

const {
  APIBaseUrl,
  APIHost,
  APIKey
} = environment

export const getCountries = async (req : Request, res : Response) => {
  const reqQueryParams = {
    currencyCode : req.query?.currencyCode,
  };

  const response = await requestHandler({
    type: 'GET',
    baseUrl: APIBaseUrl,
    endpoint: 'v1/geo/countries',
    params : reqQueryParams,
    headers: {
      'X-RapidAPI-Host': APIHost,
      'X-RapidAPI-Key': APIKey
    }
  });

  return res.status(response.statusCode)
    .json(response);
};

Definicion de una ruta

export const useCountryRoutes = (app : Application) => {
  app.use((_req : Request, res : Response, next : NextFunction) => {
    res.header(
      'Access-Control-Allow-Headers',
      'x-access-token, Origin, Content-Type, Accept'
    );
    next();
  });

  app.get(`api/v1/countries/`, [
    //middleware in needed case.
  ], getCountries);
}

Punto de entrada de la aplicacion.

import * as express from 'express';
import { useCountryRoutes } from './app/routes';
import { environment } from './environment';
import { useSwagger } from './swagger';
import bodyParser = require('body-parser');

const { ProductionMode } = environment
const app = express();

app.use(bodyParser.json());

// liveness route
app.get('/', (_req, res) => {
  res.send('Web API running')
})

if(!ProductionMode)
  useSwagger(app);
useCountryRoutes(app);

// server configuration
const port = process.env.port || 3000;
const server = app.listen(port, () => {
  console.log(`ProductionMode: ${ProductionMode}`)
  console.log(`Listening at http://localhost:${port}/api`);
});
server.on('error', console.error);
  1. Ejecución del servidor
    • Esto se logra mediante la ejecución del siguiente comando:
  npx nx serve

Una vez realizados todos estos pasos, el servidor está listo para recibir peticiones HTTP en el puerto 3000.

AnteriorSiguiente