# Introducción

### Conceptos Basicos <a href="#conceptos-basicos" id="conceptos-basicos"></a>

**Node.JS**, es un entorno en tiempo de ejecución multiplataforma, de código abierto, para la capa del servidor basado en el lenguaje de programación ECMAScript, asíncrono, con I/O de datos en una arquitectura orientada a eventos y basado en el motor V8 de Google.

**API REST**, es cualquier interfaz entre sistemas que use HTTP para obtener datos o generar operaciones sobre esos datos en todos los formatos posibles, como XML y JSON. Las operaciones más importantes relacionadas con los datos en cualquier sistema REST y la especificación HTTP son cuatro: POST (crear), GET (leer y consultar), PUT (editar) y DELETE (eliminar).

**JWT**, JSON Web Token (abreviado JWT) es un estándar abierto basado en JSON propuesto por IETF (RFC 7519) para la creación de tokens de acceso que permiten la propagación de identidad y privilegios.&#x20;

**Express.JS**, Es un framework para Node.js que sirve para ayudarnos a crear aplicaciones web en menos tiempo ya que nos proporciona funcionalidades como el enrutamiento, opciones para gestionar sesiones y cookies, entre otras cosas.

**Mongodb,** es un sistema de base de datos NoSQL orientado a documentos de código abierto.\
En lugar de guardar los datos en tablas, tal y como se hace en las bases de datos relacionales, MongoDB guarda estructuras de datos BSON (una especificación similar a JSON) con un esquema dinámico, haciendo que la integración de los datos en ciertas aplicaciones sea más fácil y rápida.

### Crea tu directorio de proyecto

Vamos a crear e inicializar el directorio para la aplicación. Para ello vamos a nuestra terminal y ejecutamos los siguientes comandos.

{% code title="Init project" %}

```bash
# Crear carpeta y moverme a ella
mkdir backend-js-shopping && cd backend-js-shopping

# Agregar git a nuestro proyecto
git init
```

{% endcode %}

### Package.json

Luego de eso vamos a crear el archivo **package.json,** el ❤️ de nuestro proyecto.

```bash
# Crea la base ❤️ de nuestro proyecto package.json
npm init
```

Cuando ejecutas npm init deberas responder algunas preguntas simples, acá te dejo un ejemplo de como se ve el resultado.

![npm init](broken-reference)

### Gitignore

Vamos a crear un archivo bastante util para git el cual va a indicarle a nuestro control de versiones que no tenga en cuenta algunos archivos y/o carpetas para que sean agregados-rastreados. Este archivo es **.gitignore**&#x20;

{% code title=".gitignore" %}

```
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*

# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json

# Runtime data
pids
*.pid
*.seed
*.pid.lock

# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov

# Coverage directory used by tools like istanbul
coverage
*.lcov

# nyc test coverage
.nyc_output

# Dependency directory
# Commenting this out is preferred by some people, see
# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git-
node_modules

# Users Environment Variables
.env.development
.env.production

lib/
data/

# IDES
.idea
.vscode

```

{% endcode %}

### Primer Commit

Hasta ahora solo hemos creado un directorio llamado **backend-js-shopping** el cual contiene un archivo **package.json** y un archivo oculto llamado **.gitignore.** Ahora es el momento de hacer nuestro primer commit, para ello ejecutamos los siguientes comandos:

```bash
# Agregar todos los archivos al commit
git add .

# Realizar el commit con un mensaje
git commit -am "Initial commit"
```

### Repositorio: [Initial commit](https://github.com/colombia-dev/medjs-workshop-fullstack-js-backend/commit/3e1e37f84dd0c57226c4ed7470ce5703ae22cc76)
