CursosEmpresasBlogLiveConfPrecios

Servir React con Express

Clase 8 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

    07:35 min
  • 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

    Viendo ahora
  • 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

      Elvis Saavedra

      Elvis Saavedra

      student•
      hace 6 años
      José Enrique Pérez Aquino

      José Enrique Pérez Aquino

      student•
      hace 6 años
      Laura Camila Pregonero

      Laura Camila Pregonero

      student•
      hace 5 años
      Rulo Code

      Rulo Code

      student•
      hace 6 años
      Wilmer Alfredo Flores Melchor

      Wilmer Alfredo Flores Melchor

      student•
      hace 5 años
      Nestor Ruben Rodriguez Caro

      Nestor Ruben Rodriguez Caro

      student•
      hace 6 años
      Cesar Fonseca

      Cesar Fonseca

      student•
      hace 5 años
      Carlos Angel Muñoz Castañeda

      Carlos Angel Muñoz Castañeda

      student•
      hace 6 años
        Mariela de Jesus Rivas Hernandez

        Mariela de Jesus Rivas Hernandez

        student•
        hace 5 años
      Elvis Ojeda Melo

      Elvis Ojeda Melo

      student•
      hace 6 años
        Bruno Amadori

        Bruno Amadori

        student•
        hace 6 años
        Enrique Moreno

        Enrique Moreno

        student•
        hace 6 años
      Cristian Daniel Jesus Rios

      Cristian Daniel Jesus Rios

      student•
      hace 5 años
        José Marquínez

        José Marquínez

        student•
        hace 5 años
      DANIEL MEDINA ARMADA Medina

      DANIEL MEDINA ARMADA Medina

      student•
      hace 5 años
        Matthias Ignacio Clein Espinoza

        Matthias Ignacio Clein Espinoza

        student•
        hace 5 años
      José Marquínez

      José Marquínez

      student•
      hace 5 años
      Ismael Grimaldo Vega

      Ismael Grimaldo Vega

      student•
      hace 5 años
      Gilberto Santamaria

      Gilberto Santamaria

      student•
      hace 5 años
      Miguel de la Rosa

      Miguel de la Rosa

      student•
      hace 6 años
        Tomás Canosa Moreno

        Tomás Canosa Moreno

        student•
        hace 6 años
        Robinson De La Cruz

        Robinson De La Cruz

        student•
        hace 6 años
      Juan Burns

      Juan Burns

      student•
      hace 6 años
      Marlon Véliz

      Marlon Véliz

      student•
      hace 6 años
      Jose Daniel Molina

      Jose Daniel Molina

      student•
      hace 6 años
      Ginnio Sarabia

      Ginnio Sarabia

      student•
      hace 6 años
      Camilo Rivera Quintero

      Camilo Rivera Quintero

      student•
      hace 6 años

      Me parece que estos temas son mejor explicarlos con mucha teoría y ejemplos prácticos. Parecido al curso de nodejs, sólo copian mucho código sin hacer pruebas...

      Servir React con Express

      Para poder empezar a correr React sobre nuestro servidor de express debemos copiar el html que se encuentra en nuestra carpeta public y pegarlo en nuestra respuesta principal del servidor de Express. Esto se vera de la siguiente forma:

      app.get('*', (req, res) => { res.send(`<!DOCTYPE html> <html> <head> <title>Platzi Video</title> </head> <body> <div id="app"></div> </body> </html>`); });

      Luego en nuestra configuracion de Webpack eliminamos las siguientes lineas de codigo:

      //El HTML plugin const HtmlWebPackPlugin = require('html-webpack-plugin'); new HtmlWebPackPlugin({ template: './public/index.html', filename: './index.html', }),

      Posteriormente alteramos las siguientes líneas:

      //Alteramos el nombre del bundle de js por app.js output: { path: path.resolve(__dirname, 'dist'), filename: 'assets/app.js', //Cambio aqui publicPath: '/', }, //Cambiamos el nombre del bundle del css por app.js new MiniCssExtractPlugin({ filename: 'assets/app.css', //Cambio aqui }),

      Por ultimo, modificamos el HTML que estamos enviando desde el servidor, agregando las líneas que hacen el llamado al bundle del css y del js.

      Quedando de la siguiente forma:

      app.get('*', (req, res) => { res.send(`<!DOCTYPE html> <html> <head> <link rel="stylesheet" href="assets/app.css" type="text/css"/> <title>Platzi Video</title> </head> <body> <div id="app"></div> </body> <script src="assets/app.js" type="text/javascript"></script> </html>`); });

      Ahora sí, podemos montar nuestro servidor nuevamente y comprobar el resultado

      Nota: Para saber si realmente estamos haciendo SSR podemos desactivar Javascript desde las configuraciones de desarrollador del navegador.

      Asi me va quedando, modificando cada una de las imagenes.

      Asi se ve cuando selecciono una pelicula.
      Cuando no carga la pelicula parece asi.
      y si no es ese el caso va a aparecer asi.

      Wow genial Esto se pone bueno :D

      malisima clase

      vamos con todo che! les dejo mi github

      https://github.com/ruben-xe

      Tuve que usar: "const serverConfig = { serverSideRender: true };"

      if (ENV === 'development') { console.log(`${ENV} config`); const webpackConfig = require('../../webpack.config'); const webpackDevMiddleware = require('webpack-dev-middleware'); const webpackHotMiddleware = require('webpack-hot-middleware'); const compiler = webpack(webpackConfig); const serverConfig = { serverSideRender: true }; app.use(webpackDevMiddleware(compiler, serverConfig)); app.use(webpackHotMiddleware(compiler)); }

      Si no se les refresca automaticamente el navegador les recomiendo borrar node_modules y package.json. Copiar el package.json igual del proyecto y ejecutar npm i para tener las mismas versiones que el profesor. Al menos eso fue lo que me ayudó y aquí les dejo el enlace al commit de esta clase: https://github.com/platzi/PlatziVideo/tree/1a68285cdb55b9a2a79c534f69cee139269b20fa

      lo hice, pero en mi caso no me funcionó :( no se que estará mal en mi codigo

      Mi navegador no se refresca automaticamente, y mi compilacion sale compiled successfully, y no tengo errores en consola. alguna idea? y si lo estoy corriendo con nodemon.

      Recheckea haber hecho bien toda la parte de webpack-hot-server ... es exactamente esa la dependencia que se encarga de realizar eso. Si no la tienes bien instalada y configurada, no te va a andar

      Me pasaba lo mismo entonces detuve nodemon y lo volví a ejecutar y todo bien.

      No entiendo, cuando hace los filename: 'assets/app.js', como entiende JS para buscar esos estilos y scripts en esa direccion, si en verdad estan dentro de frontend/styles/etc...etc....

      La propiedad filename se refiere los outputs, o sea así se llamarán cuando se compilen. No se refieren de la ruta de donde son llamados o abstraídos. Por eso en el html linkeas hacía ellos porque así se llaman cuando son compilados.

      Una consulta? cuando el profesor corrige la etiqueta del html link con rel='stylesheet' href="assets/app.css" y salva, la página web deberia actualzarse sola sin que la refresque? lo pregunto por que no se me refresca sola?

      app.get('*', (req, res) => { res.send(` <!DOCTYPE html> <html> <head> <link rel='stylesheet' href="assets/app.css" type="text/css"> <title>Platzi Video</title> </head> <body> <div id="app"></div> <script src="assets/app.js" type="text/javascript"></script> </body> </html> `); });

      Hola Daniel. Efectivamente debería actualizarse automáticamente pues con "npm run start:dev" se hace uso de nodemon. Si no lo está haciendo, seguramente hay un error en la configuración, por lo que te recomendaría repasar las dos últimas clases que son las enfocadas en eso. Saludos.

      A los nuevos que estamos llegando al curso, les recomiendo que repasen los módulos anteriores de la escuela de JS, ya que aquí ya se dan por sentadas cosas básicas que deberíamos dominar. Por el contrario nos podríamos desmotivar y frustrar por un avance atropellado. Por ejemplo repasen el curso de webpack que es muy necesario para entender las configs y también el de react para los próximos módulos.

      El orden de los middlewares importa

      Recuerden que es importante en qué línea mandan llamar a su middleware. En este caso debe ir antes del app.get()

      if (ENV === 'development') { console.log('Development config'); const webpackConfig = require('../../webpack.config'); const webpackDevMiddleware = require('webpack-dev-middleware') const webpackHotMiddleware = require('webpack-hot-middleware'); const compiler = webpack(webpackConfig); const serverConfig = { port: PORT, hot: true }; app.use(webpackDevMiddleware(compiler, serverConfig)); app.use(webpackHotMiddleware(compiler)); } app.get('*', (req, res) => { res.send(` <!DOCTYPE html> <html> <head> <link rel="stylesheet" href="assets/app.css" type="text/css"> <title>Platzi Video</title> </head> <body> <div id="app"></div> <script src="assets/app.js" type="text/javascript"></script> </body> </html> `); });

      Hola, tengo un problema y es que cuando ya he configurado todo, en la consola del navegador me dice : app.js:2 Uncaught SyntaxError: Unexpected token '<' y si examino el error me muestra el html que servimos como error, pensé que había usado las comillas incorrectas pero no es eso.

      No me queda claro para que sirve @babel/register

      Lo que hace es asociar el transpilador de babel al require de node, es decir, cada vez que requieras un módulo, por ej:

      require('./server.js')

      server.js puede usar sintaxis moderna ya que babel lo compilara antes de que node lo ejecute.

      Es correcto lo que dice el compañero. Puedes probar borrando las lineas donde requerimos @babel-register y te enviará un error recalcando que estas usando sintaxis es6.

      Una pregunta, no sería mejor crear otro archivo "webpack.dev.config.js" y un script que ejecute una configuracion de desarrollo, para poder ejecutarlo sin crear la carpeta dist con todos los archivos, y no mezclar la configuracion de desarrollo con la configuracion de produccion???

      ¡¡Buenísimo!! 🤩🤩🤩

      Server side rendering 🤩

      Creo que debo repasar.

      Genial!