Tu primera experiencia con Node.js

1

驴D贸nde aprender backend con Node.js actualizado?

2

Todo lo que aprender谩s sobre backend con Node.js

3

驴Qu茅 es Node.js?

4

驴Qu茅 es Node.js y para qu茅 sirve?

5

Diferencias entre Node.js y JavaScript

6

Resumen: Diferencias Nodejs y Javascript

7

Instalaci贸n de Node.js

8

Arquitectura orientada a eventos

9

Node.js para la web

Manejo y uso de Streams con Node.js

10

Introducci贸n a streams

11

Readable y Writable streams

12

Duplex y Transforms streams

Uso de utilidades de Node.js

13

Sistema operativo y sistema de archivos

14

Administrar directorios y archivos

15

Consola, utilidades y debugging

16

Clusters y procesos hijos

Crea tu primer proyecto en Express.js

17

驴Qu茅 es Express.js y para qu茅 sirve?

18

Creando tu primer servidor con Express.js

19

Request y Response Objects

Aprende a crear un API con REST

20

Anatom铆a de una API Restful

21

Estructura de una pel铆cula con Moockaru

22

Implementando un CRUD en Express.js

23

M茅todos idempotentes del CRUD

24

Implementando una capa de servicios

C贸mo conectarse con librer铆as externas en Express.js

25

Creaci贸n de una BD en MongoAtlas

26

Conexi贸n a MongoAtlas una instancia de MongoDB

27

Conexi贸n con Robot3T y MongoDB Compass a una BD

28

Implementaci贸n de las acciones de MongoDB

29

Conexi贸n de nuestros servicios con MongoDB

Conoce como funcionan los Middleware en Express.js

30

驴Qu茅 es un middleware? Capa de manejo de errores usando un middleware

31

Manejo de errores as铆ncronos y s铆ncronos en Express

32

Capa de validaci贸n de datos usando un middleware

33

驴Qu茅 es Joi y Boom?

34

Implementando Boom

35

Implementando Joi

36

Probar la validaci贸n de nuestros endpoints

37

Middlewares populares en Express.js

Implementa tests en Node.js

38

Creaci贸n de tests para nuestros endpoints

39

Creaci贸n de tests para nuestros servicios

40

Creaci贸n de tests para nuestras utilidades

41

Agregando un comando para coverage

42

Debugging e inspect

Despliega tu primera aplicaci贸n en Express.js

43

Considerando las mejores pr谩cticas para el despliegue

44

Variables de entorno, CORS y HTTPS

45

驴C贸mo implementar una capa de manejo de cach茅?

46

驴C贸mo contener tu aplicaci贸n en Docker?

47

Despliegue en Now

Conclusiones

48

驴Qu茅 aprendiste en este curso?

Variables de entorno, CORS y HTTPS

44/48

Lectura

Como usar las variables de entorno para diferente ambientes

Ya vimos c贸mo en nuestro ambiente local podemos hacer uso de las variables de entorno usando el archivo .env y la librer铆a dotenv. Generalmente lo que se recomienda es usar el mismo para los diferentes ambientes como Staging (Pruebas) y Producci贸n.

Para ello se debe acceder al servidor remoto:

  1. Duplicar el archivo .env.example y renombrarlo por .env.
  2. Cargar las respectivos valores de las variables de entorno.
  3. Usar valores y servicios diferentes para cada ambiente, esto quiere decir que las credenciales de desarrollo, staging y producci贸n deben ser completamente diferente.
  4. Si se quiere tener un backup de estos valores se recomienda usar las notas seguras de aplicaciones como 1Password o LastPass.

Como lo hemos dicho antes no se debe hacer commit del archivo .env y este debe estar en el .gitignore, ademas se recomienda manejar solo un archivo .env. M谩s informaci贸n: https://github.com/motdotla/dotenv#faq

Cuando no es posible acceder al servidor remoto

Algunos servicios como Heroku o Now no nos permiten acceder a un servidor remoto pues la administraci贸n del servidor es controlada por los mismos servicios, sin embargo cada servicio tiene sus mecanismos para establecer las variables de entorno:

Variables de entorno de forma nativa

El uso del archivo .env junto con la biblioteca dotenv es un mecanismo que nos facilita la configuraci贸n de variables de entorno pero si por alguna raz贸n las quisi茅ramos cargar de manera nativa, es decir desde el sistema operativo recomiendo este tutorial de Digital Ocean

Habilitando CORS en producci贸n

El Intercambio de Recursos de Origen Cruzado (Cross-Origin Resource Sharing) es un mecanismo que agrega unos encabezados (Headers) adicionales HTTP para permitir que un user agent (generalmente un navegador) obtenga permisos para acceder a los recursos de un servidor en un origin distinto (dominio) del que pertenece.

Por ejemplo una solicitud de origen cruzado seria hacer una petici贸n AJAX desde una aplicaci贸n que se encuentra en https://dominio-a.com para cargar el recurso https://api.dominio-b.com/data.json.

Por razones de seguridad, los navegadores restringen las solicitudes HTTP de origen cruzado iniciadas dentro de un script.

Si necesitamos permitir request desde un dominio diferente al del servidor podemos usar el middleware cors para permitirlo, pero es importante no dejarlo expuesto a todos los dominios.

Habilitar CORS para todos los request (No recomendado en producci贸n)

const express = require("express");
const cors = require("cors");
const app = express();

app.use(cors());

app.get("/products/:id", function(req, res, next) {
  res.json({ msg: "This is CORS-enabled for all origins!" });
});

app.listen(8000, function() {
  console.log("CORS-enabled web server listening on port 8000");
});

Habilitar CORS para los request espec铆ficos de un cliente (Recomendado para producci贸n)

const express = require("express");
const cors = require("cors");
const app = express();

const corsOptions = { origin: "http://example.com" };

app.use(cors(corsOptions));

app.get("/products/:id", function(req, res, next) {
  res.json({ msg: "This is CORS-enabled for only example.com." });
});

app.listen(8000, function() {
  console.log("CORS-enabled web server listening on port 8000");
});

Debemos tener en cuenta que para aplicaciones server-side es poco probable que necesiten el uso de CORS debido a que las aplicaciones conviven en el mismo dominio. Sin embargo, es buena practica habilitarlo para los llamados externos de nuestra API.

M谩s informaci贸n sobre el middleware CORS en https://expressjs.com/en/resources/middleware/cors.html

C贸mo funciona y por qu茅 es importante el uso de HTTPS

El Protocolo Seguro de Transferencia de Hipertexto (HTTPS) es un protocolo HTTP que funciona en el puerto 443 y utiliza un cifrado basado en SSL (Secure Sockets Layer) / TLS (Transmission Layer security) con el fin de crear un canal de comunicaci贸n seguro entre el cliente y el servidor.

Por qu茅 usar HTTPS

Una de las razones por la cual siempre debemos usar sitios con HTTPS es que sin este cualquier individuo podr铆a efectuar ataques conocidos como man-in-the-middle o eavesdropping y obtener nuestro usuario y contrase帽a en el momento en que intentamos acceder a este servicio que no tiene HTTPS establecido.

C贸mo funciona

  1. El cliente env铆a un mensaje al servidor y este responde con su certificado publico.
  2. El cliente comprueba que este certificado sea valido y toma la llave publica.
  3. El cliente genera una cadena llamada pre-master secret y la cifra usando la llave publica del servidor y se lo env铆a.
  4. El servidor usa su llave privada para comprobar el pre-master secret.
  5. En ese momento tanto el cliente como el servidor usan el pre-master secret para generar un master secret que es usado como una llave sim茅trica.
  6. Teniendo este par de llaves ya se pueden enviar mensajes seguros entre ellos.

C贸mo habilitar HTTPS en nuestro servidor

Dependiendo el servicio de hosting que estemos usando puede ofrecernos o no una instalaci贸n de certificados de seguridad SSL/TLS que pueden tener alg煤n costo. Sin embargo existen servicios como Let鈥檚 Encrypt que permiten la instalaci贸n de este certificado completamente gratis. Servicios como Now y Heroku ofrecen HTTPS por defecto.

M谩s informaci贸n:

Aportes 25

Preguntas 0

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Reg铆strate o inicia sesi贸n para participar.

SI alguno la API le funcionaba en Postman y no en el front, les recomiendo instalar cors ($ npm install cors) con eso ya solucionan, dicho problema.

Implemente Cors en el proyecto creando un la configuracion en un archivo por aparte.
Creo que lo mejor para poder implementarlo es poder asignar los dominio en las variables de entorno.

En este pedazo de c贸digo pregunto si es en entorno de desarrollo o de producci贸n en donde est谩 corriendo.

Ya solo es de colocar en las variables de entorno el dominio a utilizar.

const { config } = require('../../config');
const cors = require('cors');

function corsHandler() {
    const configCors = {
        origin: config.cors,
    }
    if (config.dev) {
        return cors();
    }
    return cors(configCors);
}

Configurado en index.js

app.use(corsHandler());

que genial seria, que el contenido de tipo articulo, pueda exportarse en formato PDF
pulgar arriba los que piensan lo mismo!

En algun momento me tope con que no podia hacer peticiones a mi api.dominio.com desde app.dominio.com y siempre me marco esto de los CORS fue en ese momento cuando escuche por primera vez de esto!!

Realmente es un curso completo, con toda esta informaci贸n

Me encanta que en este curso el profesor ha proporcionado informaci贸n muy valiosa y que sirve de mucho apoyo a quienes reci茅n vamos aprendiendo. Se agradece

Super util esta informaci贸n!

muy buena recomendadcion para la construccion de un proyecto de backend

No sabia que el https se pudiera conseguir de manera gratuita 馃槷

este curso me gusto mucho dejaron buena documentaci贸n.

Gracias!

Excelente informaci贸n, vamos a implementarla 馃槂

Muy buena informacion para llevar a cabo futuros proyectos

Cors entonces podr铆a utilizarse para proteger cuando se consume una API.

Destacable la informai贸n suministrada

Gracias por la excelente informaci贸n.

Excelente post.

gran informaci贸n para despique del api y de cualquier aplicaci贸n y la seguridad m铆nima que deben tener nuestro servidores y nuestras aplicaciones

Informaci贸n fundamental para el proyecto!

excelente post

Muy buena explicaci贸n

Let鈥檚 Encrypt es una muy buena alternativa para obtener certificados SSL. El certificado dura unos 3 meses y se puede renovar. Tambi茅n en la p谩gina muestran scripts para automatizar el proceso y as铆 tener un servidor HTTPS para toda la vida.

excelente amplia informacion

Buen documentaci贸n.

interesante esta lectura, me gusto lo de seguridad.