Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/rudemex/node-typescript-express-starter
Starter server express nodejs with typescript.
https://github.com/rudemex/node-typescript-express-starter
backend-for-frontend bff express javascript js microservice node nodejs typescript
Last synced: 2 days ago
JSON representation
Starter server express nodejs with typescript.
- Host: GitHub
- URL: https://github.com/rudemex/node-typescript-express-starter
- Owner: rudemex
- License: mit
- Created: 2020-12-21T00:07:23.000Z (almost 4 years ago)
- Default Branch: master
- Last Pushed: 2021-08-25T23:48:13.000Z (about 3 years ago)
- Last Synced: 2023-03-24T04:30:50.432Z (over 1 year ago)
- Topics: backend-for-frontend, bff, express, javascript, js, microservice, node, nodejs, typescript
- Language: JavaScript
- Homepage:
- Size: 263 KB
- Stars: 6
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: license.md
- Code of conduct: .github/CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
## Glosario
- [📝 Requerimientos básicos](#basic-requirements)
- [🛠️ Instalar dependencias](#install-dependencies)
- [⚙️ Configuración](#configurations)
- [💻 Scripts](#scripts)
- [📚 Swagger](#swagger-info)
- [📤 Commits](#commits)
- [😝 Mocks](#mocks)---
#### 📝 Requerimientos básicos
- Node.js v10.15.3 or higher ([Download](https://nodejs.org/es/download/))
- NPM v6.4.1 or higher
- Typescript
- [Mock Json Server](https://www.npmjs.com/package/mock-json-server)#### 🛠 Instalar dependencias
Cuando tenemos los requisitos básicos, clonamos el repositorio, vamos a la carpeta del proyecto e instalamos sus
dependencias.```
npm install
```## ⚙️ Configuración
Esta aplicación utiliza la dependencia de [config](https://www.npmjs.com/package/config) para facilitar la configuración
de las variables del entorno, lo que la hace escalable y robusta al desplegar la aplicación en diferentes entornos.En el directorio `./config` se encuentra un archivo llamado `development.json` que contiene la configuración para un
entorno local, mientras que el archivo `custom-environment-variables.json`
obtiene los valores por medio de los `key` definidos en las variables de entorno que se configuran en el
el servidor.Básicamente el archivo funciona como un objeto que se exporta y puede ser consumido invocándolo en el archivo que
requiere utilizar la información cargada. Si se necesita añadir más datos para consumir, como la conexión a una base de
datos, a una redis, la url de algún micro-servicio, API, etc. sólo hay que añadirlo en los archivos mencionados manteniendo el
esquema.```json5
{
"server": {
"port": 8080,
"context": "/api",
"origins": "http://localhost:3000,http://localhost:3001,http://localhost:8080",
"originsReadOnly": "http://localhost:3001",
"headersAllowed": "Content-Type,Authorization,Set-Cookie,Access-Control-Allow-Origin,Cache-Control,Pragma",
"methodsAllowed": "GET,HEAD,PUT,POST,DELETE,PATCH,OPTIONS",
"corsCredentials": "false",
"corsEnabled": "true",
"tz": "America/Argentina/Buenos_Aires",
"showLogInterceptor": "false",
"enabledLogs": "true"
},
"swagger": {
"path":'api-docs',
"enabled": "true"
},
"params": {
},
"services": {
}
}```
🤓 Ver todas las propiedades de configuración disponibles en detalle.
#### Server
`port`: Es el puerto por el cual va a correr el servidor.
- Type: `Number`
- Default: `8080``context`: Es el contexto el que se puede acceder a la API del servidor, de esta manera no se exponen los endpoints en
la ruta principal de la aplicación.- Type: `String`
- Default: `/api``origins`: Es una whitelist para que la aplicación sólo pueda ser consumida por urls confiables y evitar cualquier tipo
de solicitudes no deseadas y maliciosas. Debes escribir las urls separadas por una coma.- Type: `String`
- Default: `http://localhost:3000,http://localhost:3001,http://localhost:8080``originsReadOnly`: Es la configuración de las urls para **CORS**, lo que permite validar quién puede consumir el
servidor.- Type: `String`
- Default: `http://localhost:3001``headersAllowed`: Parámetros que va a recibir por el header en los request.
- Type: `String`
-
Default: `Content-Type,Authorization,Set-Cookie,Access-Control-Allow-Origin,Cache-Control,Pragma``methodsAllowed`: Métodos http disponibles para el cors
- Type: `String`
- Default: `GET,HEAD,PUT,POST,DELETE,PATCH,OPTIONS``corsCredentials`: Habilita o deshabilita el uso de las credenciales en las peticiones CORS en el servidor.
- Type: `Boolean`
- Default: `false``corsEnabled`: Habilita o deshabilita el uso de CORS en el servidor.
- Type: `Boolean`
- Default: `false``tz`: Es la configuración de la zona horaria para el
servidor. [Lista de zonas horarias](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List)- Type: `String`
- Default: `America/Argentina/Buenos_Aires``showLogInterceptor`: Habilita o deshabilita la visualización de los interceptors de los requests y responses por medio de logs.
- Type: `Boolean`
- Default: `false``enabledLogs`: Habilita o deshabilita los logs de la aplicación.
- Type: `Boolean`
- Default: `true`#### Swagger
`path`: Define la ruta de la documentación **Swagger**, se escribe sin el `/` (slash).
- Type: `String`
- Default: `api-docs``enabled`: Habilitar o deshabilitar la documentación **Swagger** de los endpoints del servidor.
- Type: `Boolean`
- Default: `true`#### Params
Configuración de parámetros a utilizar en la aplicación, manteniendo el esquema `key:value`.
```json5
{
...
"params": {
"my-param": ""
},
...
}
```#### Services
Es donde se va a colocar las urls de los micro-servicios a consumir, manteniendo el esquema `key:value`.
```json5
{
...
"services": {
"my-microservice": ""
},
...
}
```## 💻 Scripts
#### Local o Desarrollo
Inicia la aplicación en modo desarrollo usando `nodemon` y `ts-node` para hacer hot reloading.
```
npm run dev
```#### Server Mock
Ejecuta la aplicación mockeada.
```
npm run mock
```#### Build
Transpile la aplicación limpiando primero la carpeta de destino `./dist`.
```
npm run build
```#### Producción
Inicia la aplicación de transpilada de la carpeta `./dist`, se requiere previamente haber realizado el **build**.
```
npm run start
```#### Test
Inicia la fake app para correr los unit test con **Jest** y retorna el coverage.
```
npm run test
```## 📚 Swagger
El proyecto cuenta con un **Swagger** que tiene documentado los endpoints con sus definiciones.
Para documentar los nuevos endpoints, se debe completar con la información de los mismos con la anotación en **YAML** en
el archivo `api-swagger.yaml` que está en el root del proyecto.Esta documentación puede ser activada o desactivada desde el archivo de configuración o en las variables de entorno del proyecto.
```json5
// ./config/development.json
{
...
"swagger": {
"path": 'api-docs',
"enabled": "true"
},
...
}
``````js
// ENV
SWAGGER_PATH=api-docs
SWAGGER_ENABLED=true;
```#### URL
Acceso a la documentación y testeo de los endpoints: `http://localhost:8080/api-docs`
#### Scheme
```
://<:port>/
```
## 📤 CommitsPara los mensajes de commits se toma como referencia [`conventional commits`](https://www.conventionalcommits.org/en/v1.0.0-beta.4/#summary).
```
[optional scope]:[optional body]
[optional footer]
```- **type:** chore, docs, feat, fix, refactor (más comunes)
- **scope:** indica la página, componente, funcionalidad
- **description:** comienza en minúsculas y no debe superar los 72 caracteres.## 😝 Mocks
Para generar el **Mock** del endpoint, hay que generar un archivo **javascript** dentro del directorio `./mock/api`
correspondiente al endpoint.El archivo del **mock** es un objeto `json` exportado como modulo, el cual tiene que tener la definición de la ruta, el
método, el parámetro (en caso de que sea necesario), y la respuesta.```js
// ./mock/api/posts.jsmodule.exports = {
'/api/posts': {
get: [
{
userId: 1,
id: 1,
title:
'sunt aut facere repellat provident occaecati excepturi optio reprehenderit',
body:
'quia et suscipit suscipit recusandae consequuntur expedita et cum reprehenderit molestiae ut ut quas totam nostrum rerum est autem sunt rem eveniet architecto',
},
...{
userId: 1,
id: 2,
title: 'qui est esse',
body:
'est rerum tempore vitae sequi sint nihil reprehenderit dolor beatae ea dolores neque fugiat blanditiis voluptate porro vel nihil molestiae ut reiciendis qui aperiam non debitis possimus qui neque nisi nulla',
},
],
post: {
userId: 1,
id: 1,
title:
'sunt aut facere repellat provident occaecati excepturi optio reprehenderit',
body:
'quia et suscipit suscipit recusandae consequuntur expedita et cum reprehenderit molestiae ut ut quas totam nostrum rerum est autem sunt rem eveniet architecto',
},
},
'/api/posts/:id': {
get: {
userId: 1,
id: 1,
title: 'eum et est occaecati',
body:
'ullam et saepe reiciendis voluptatem adipisci sit amet autem assumenda provident rerum culpa quis hic commodi nesciunt rem tenetur doloremque ipsam iure quis sunt voluptatem rerum illo velit',
},
},
};
```Una vez generado el archivo con la definición del endpoint junto a su respuesta, hay que requerirlo en el
archivo `routes.js` que se encuentra en `./mock/api`.```js
// ./mock/api/routes.jsconst routes = {
...require('./posts'),
...
...require('./another-end-point'),
};module.exports = routes;
```
---