CursosEmpresasBlogLiveConfPrecios

Creación del servidor en Express

Clase 5 de 22 • Curso de Server Side Render con Express

Contenido del curso

Conocimientos necesarios para aplicar SSR

  • 1
    Lo que aprenderás sobre server side render

    Lo que aprenderás sobre server side render

    01:12 min
  • 2
    Presentación del proyecto del curso y sus herramientas

    Presentación del proyecto del curso y sus herramientas

    01:52 min
  • 3
    ¿Qué es Server Side Rendering?

    ¿Qué es Server Side Rendering?

    04:36 min

Preparando entorno para aplicar SSR

  • 4
    Actualizando dependencias en NPM

    Actualizando dependencias en NPM

    05:17 min
  • 5
    Creación del servidor en Express

    Creación del servidor en Express

    Viendo ahora
  • 6
    Usando Nodemon y Dotenv

    Usando Nodemon y Dotenv

    05:31 min
  • 7
    Integración de Webpack con Express

    Integración de Webpack con Express

    13:10 min

Integración de Express con React

  • 8
    Servir React con Express

    Servir React con Express

    05:25 min
  • 9
    Abstrayendo React Router, creando history y haciendo initialState más accesible

    Abstrayendo React Router, creando history y haciendo initialState más accesible

    12:01 min

Aplicar Server Side Rendering

  • 10
    Definición de la función principal para realizar el renderizado desde el servidor

    Definición de la función principal para realizar el renderizado desde el servidor

    11:59 min
  • 11
    Assets require hook

    Assets require hook

    04:14 min
  • 12
    Hydrate y estado de Redux desde Express

    Hydrate y estado de Redux desde Express

    09:17 min

Trabaja con entornos de desarrollo y producción

  • 13
    Configurando nuestro servidor para producción

    Configurando nuestro servidor para producción

    07:02 min
  • 14
    Configurando webpack para producción

    Configurando webpack para producción

    11:28 min
  • 15
    Optimización del Build

    Optimización del Build

    09:07 min
  • 16
    Aplicar hashes al nombre de nuestros builds

    Aplicar hashes al nombre de nuestros builds

    10:40 min

Buenas prácticas de Server Side Render

  • 17
    Vendorfiles en Webpack: definiendo cacheGroups

    Vendorfiles en Webpack: definiendo cacheGroups

    03:54 min
  • 18
    Vendorfiles en Webpack: generando el vendorfile

    Vendorfiles en Webpack: generando el vendorfile

    07:19 min
  • 19
    Configuración de ESLint

    Configuración de ESLint

    10:45 min

Alternativas al SSR con Express

  • 20
    Cómo implementar Next.js

    Cómo implementar Next.js

    05:58 min
  • 21
    Cómo usar Gatsby.js

    Cómo usar Gatsby.js

    04:02 min
  • 22
    Cuando usar cada una de las herramientas presentadas

    Cuando usar cada una de las herramientas presentadas

    02:54 min
Tomar examen

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads

      Comentarios

      Nelson Cadenas

      Nelson Cadenas

      student•
      hace 6 años
        Javier Armando Vargas Vega

        Javier Armando Vargas Vega

        student•
        hace 6 años
        Irungaray Agustin

        Irungaray Agustin

        student•
        hace 6 años
      Sergio Perez

      Sergio Perez

      student•
      hace 6 años
      Daniel Hernández

      Daniel Hernández

      student•
      hace 6 años
      Camilo José Mezú Mina

      Camilo José Mezú Mina

      student•
      hace 6 años
        Erik Elyager

        Erik Elyager

        student•
        hace 6 años
      Nicolas Esteban Manograsso

      Nicolas Esteban Manograsso

      student•
      hace 5 años
      HUGO ANDRES DIAZ BERNAL

      HUGO ANDRES DIAZ BERNAL

      student•
      hace 6 años
        Alejandro Daniel Oroncoy Almeyda

        Alejandro Daniel Oroncoy Almeyda

        student•
        hace 6 años
      Daniel Hernández

      Daniel Hernández

      student•
      hace 6 años
        Enrique Moreno

        Enrique Moreno

        student•
        hace 6 años
      Jose Daniel Molina

      Jose Daniel Molina

      student•
      hace 6 años
      Camilo José Mezú Mina

      Camilo José Mezú Mina

      student•
      hace 6 años
      José Agüero

      José Agüero

      student•
      hace 4 años
      Eden Gomez Gress

      Eden Gomez Gress

      student•
      hace 6 años
        Carlos Sampol

        Carlos Sampol

        student•
        hace 6 años
        Eden Gomez Gress

        Eden Gomez Gress

        student•
        hace 6 años
      Carlos Alfonso Garcia Rivera

      Carlos Alfonso Garcia Rivera

      student•
      hace 5 años
      Maria Elizabeth Minero Alvarenga

      Maria Elizabeth Minero Alvarenga

      student•
      hace 5 años
      Luis Carlos Kristen Ospitia

      Luis Carlos Kristen Ospitia

      student•
      hace 6 años
        Rodrigo Esgueva Ordóñez

        Rodrigo Esgueva Ordóñez

        student•
        hace 6 años
      Carlos Enrique Ramírez Flores

      Carlos Enrique Ramírez Flores

      student•
      hace 6 años
      Fernando Cordero

      Fernando Cordero

      student•
      hace 6 años
      Ever Alfredo Sorto Ayala

      Ever Alfredo Sorto Ayala

      student•
      hace 5 años
      Nicolas Esteban Manograsso

      Nicolas Esteban Manograsso

      student•
      hace 5 años
      Cristofher Jumbo Jimenez

      Cristofher Jumbo Jimenez

      student•
      hace 5 años

      ++Resumen de la Clase++

      1. Creamos 2 carpetas dentro de la carpeta src, src/server: fuentes con toda la lógica relacionada con el servidor src/frontend: fuentes con toda la lógica relacionada con la app.

      2. Movemos todos los archivos de nuestra app en react ubicada actualmente en la carpeta src, hacia src/frontend.

      3. Creamos en la carpeta src/server 2 archivos, index.js y server.js.

      4. Instalamos la siguiente dependencia: npm install @babel/register

      5. En el archivo src/server/index.js, agregamos la siguiente configuración: require('@babel/register')({ presets: ['@babel/preset-env', '@babel/preset-react'], }) require('./server')

      6. Instalamos más dependencias: npm install express dotenv.

      7. Express sirve para poder instalar nuestro servidor local y dotenv se utiliza para manejar nuestras variables de entorno.

      8. Agregamos todo el código necesario para correr el servidor de express en el archivo src/server/server.js.

      9. Creamos un nuevo script en el archivo package.json, para poder ejecutar nuestro servidor: "scripts": { "start:dev" : "node src/server/index" }

      10. Ejecutamos nuestro servidor desde la consola con: npm run start:dev.

      11. Desde el navegador de Google Chrome, ingremos a la dirección 127.0.0.1:3000 o localhost:3000 para verificar que esta funcionando nuestro servidor de express.

      Muy buen resumen. Muchas gracias por el aporte.

      Gracias por tus aportes, los guardo porque seguro van a ser de utilidad!

      Comparto mis apuntes, se agradece feedback 👍:

      • Primero tenemos dividir el frontend y el server se hace creando una carpeta para cada uno en src y colocamos los respectivos archivos en su respectiva carpeta

      • en la carpeta de server creamos dos archivos que sera el index.js que sera donde vamos a tener el entry point para que la aplicacion pueda funcionar y el server.js donde tendremos el servidor con express

      • instalamos una nueva dependencia para usar babel en el servidor

        • npm install @babel/register lo que hace es un buind a nuestro entorno para usar los presets de babel en el servidor
      • en index.js del server lo primero que hacemos es requerir el paquete de @babel/register y lo que va a hacer es llamar una configuracion que vamos a indicarse la indicamos dentro de un objeto con la configuracion que necesitamos

        require('@babel/register')({ presets:[ '@babel/preset-env', '@babel/preset-react' ] })
      • luego llamamos nuestro archivo server que es donde tendremos toda la logica que estaremos haciendo

      • luego instalamos express y dotenv

      • en el archivo del servidor, osea server.js importamos express desde express y definimos una aplicacion llamando a express

      • llamamos a la aplicacion que acabamos de definir y utilizamos el metodo get('') que sera el tipo de ruta que vamos a estar llamando, en el get le indicamos que tipo de ruta estamos llamando le pasamos '*' que quiere decir que vamos a recibir todas las rutas, como segundo parametro le pasamos una funcion anonima que recibira un request y un response, dentro de esta funcion enviaremos una respuesta al usuario que en este caso sera un JSON que llamara a un hello y retornara express

        import express from 'express' //importamos express const app = express(); app.get('*', (req, res) => { res.send({ hello: 'express' }); });
      • Por ultimo tenemos indicarle en que puerto va a correr nuestro servidor utilizando la funcion listen que recibe como parametros el puerto y un manejo de error

        app.listen(3000, (err) => { if (err) console.error(); else console.log('Server running on port: 3000'); })
      • Luego creamos un nuevo script para ejecutar nuestro servidor que era de la siguiente forma

        "start:dev": "node src/server/index"
      npm i @babel/register -D

      o

      npm install @babel/register --save-dev

      las 2 formas son lo mismo

      ¿Babel Register debería ser dependencia de desarrollo?

      Así es, solo de desarrollo.

      Paquetes de esta clase npm install @babel/register express dotenv

      Cuando cambiamos la ubicación de los archivos en la carpeta frontend, nuestro npm run start no podrá encontrar nuestra raíz, eso nos afecta, hay que cambiar las rutas para arreglarlo o no es necesario?

      Si nos afecta, pero se puede arreglar cambiando la raíz de nuestro proyecto, en webpack.config.js, cambiando el entry por

      entry: './src/frontend/index.js'

      Luego vuelve a la terminal y corre el comando npm run start, y no debería de haber problema!

      otra manera de escribirlo...

      app.listen(3000, (error) => { error ? console.log(error) : console.log('Server running on 3000 port'); });

      y otra más simple seria:

      app.listen(3000, (error) => console.error(error || 'Server on port 3000'));

      Index.js

      carbon.png
      server.js
      carbon (1).png

      ¿No deberían instalarse los paquetes del servidor aparte? osea en la carpeta del server y no en la general del proyecto

      Quiero hacer una consulta respecto a Express como api, he montado con Nuxt.js el módulo (npm i rss) para generar xml para podcast, el caso que cuando lo subo a Heroku para hacer pruebas (Podbase validator) todo perfecto menos el tiempo en generar el xml que es de 4 segundos aproximadamente y eso es muchísimo. , ¿cómo podría solucionarlo?, gracias

      Buen dia companeros, cuando trato de ejecutar el comando " npm run start:dev" me sale este error

      Error: Cannot find module '@babel/preset-presets-env' from '/Users/eden/Desktop/platzi/server-side-express/PlatziVideo2/PlatziVideo2'

      Alguien sabe a que se debe?

      Es por que estas llamando al paquete mal.

      Tienes: @babel/preset-presets-env Es: @babel/preset-env

      Saludos!

      En donde tengo que modificar el llamado de ese modulo?

      para usar bebel en el servidor usamos @babel/registrer

      Genial!

      buen día, alguien que me ayude, tengo el siguiente error.

      ERROR in Entry module not found: Error: Can't resolve 'dev' in '/mnt/c/Users/luisk/OneDrive/Documents/PLATZI/SERVER_SIDE_RENDER_EXPRESS/PlatziVideo-feature-router-redux' ERROR in multi (webpack)-dev-server/client?http://localhost:8080 dev Module not found: Error: Can't resolve 'dev' in '/mnt/c/Users/luisk/OneDrive/Documents/PLATZI/SERVER_SIDE_RENDER_EXPRESS/PlatziVideo-feature-router-redux' @ multi (webpack)-dev-server/client?http://localhost:8080 dev main[1]```

      Buenas Luis:

      Asegúrate de poner en el package.json:

      "start:dev": "node src/server/index"

      y en consola ejecutar:

      npm run start:dev

      Creación del servidor en Express

      Agregamos 2 nuevos paths dentro de src.

      fronted y server

      en fronted vamos a mover todos los paths que estan detro de src, a exepción del nuevo path server

      En en path server vamo a crear 2 archivos js server.js y index.js

      instalamos el paquete babel register

      @babel/register

      npm i @babel/register

      instalar express y dotenv

      express

      dotenv

      npm i express dotenv
      const express = require('express'); const app = express() app.get('*', (req, res) => { res.send({ hello: 'Hello', world: 'World'}) }) const server = app.listen(3000, () => { console.log(`Server listen on port http://localhost:${server.address().port}`); }) // Mi código

      ¿Qué hace esta estructura ?

      require('@babel/register')({1.2k (gzipped: 532) presets: ['@babel/preset-env','@babel/preset-react' ] })

      ¿Lo que se creó en el Curso de Backend con Node.js no se aplica en este?

      Lo que hemos hecho ha sido, dividir dentro del src el frontend y el backend (client y server) Installar express y dotenv, pero hemos usado express para crear el servidor. Proximamente usaremos el dotenv y nodemon ... Continuara heheheh :green_heart: