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:13 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:18 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:15 min
  • 12
    Hydrate y estado de Redux desde Express

    Hydrate y estado de Redux desde Express

    09:18 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:55 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
        Elvis Saavedra

        Elvis Saavedra

        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...

        José Enrique Pérez Aquino

        José Enrique Pérez Aquino

        student•
        hace 5 años

        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.

        Laura Camila Pregonero

        Laura Camila Pregonero

        student•
        hace 5 años

        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.

        Rulo Code

        Rulo Code

        student•
        hace 6 años

        Wow genial Esto se pone bueno :D

        Wilmer Alfredo Flores Melchor

        Wilmer Alfredo Flores Melchor

        student•
        hace 5 años

        malisima clase

        Nestor Ruben Rodriguez Caro

        Nestor Ruben Rodriguez Caro

        student•
        hace 6 años

        vamos con todo che! les dejo mi github

        https://github.com/ruben-xe

        Cesar Fonseca

        Cesar Fonseca

        student•
        hace 5 años

        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)); }
        Carlos Angel Muñoz Castañeda

        Carlos Angel Muñoz Castañeda

        student•
        hace 5 años

        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

          Mariela de Jesus Rivas Hernandez

          Mariela de Jesus Rivas Hernandez

          student•
          hace 5 años

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

        Elvis Ojeda Melo

        Elvis Ojeda Melo

        student•
        hace 6 años

        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.

          Bruno Amadori

          Bruno Amadori

          student•
          hace 6 años

          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

          Enrique Moreno

          Enrique Moreno

          student•
          hace 6 años

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

        Cristian Daniel Jesus Rios

        Cristian Daniel Jesus Rios

        student•
        hace 5 años

        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....

          José Marquínez

          José Marquínez

          student•
          hace 5 años

          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.

        DANIEL MEDINA ARMADA Medina

        DANIEL MEDINA ARMADA Medina

        student•
        hace 5 años

        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> `); });
          Matthias Ignacio Clein Espinoza

          Matthias Ignacio Clein Espinoza

          student•
          hace 5 años

          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.

        José Marquínez

        José Marquínez

        student•
        hace 5 años

        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.

        Ismael Grimaldo Vega

        Ismael Grimaldo Vega

        student•
        hace 5 años

        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> `); });
        Gilberto Santamaria

        Gilberto Santamaria

        student•
        hace 5 años

        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.

        Miguel de la Rosa

        Miguel de la Rosa

        student•
        hace 6 años

        No me queda claro para que sirve @babel/register

          Tomás Canosa Moreno

          Tomás Canosa Moreno

          student•
          hace 6 años

          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.

          Robinson De La Cruz

          Robinson De La Cruz

          student•
          hace 5 años

          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.

        Juan Burns

        Juan Burns

        student•
        hace 6 años

        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???

        Marlon Véliz

        Marlon Véliz

        student•
        hace 6 años

        ¡¡Buenísimo!! 🤩🤩🤩

        Jose Daniel Molina

        Jose Daniel Molina

        student•
        hace 6 años

        Server side rendering 🤩

        Ginnio Sarabia

        Ginnio Sarabia

        student•
        hace 6 años

        Creo que debo repasar.

        Camilo Rivera Quintero

        Camilo Rivera Quintero

        student•
        hace 6 años

        Genial!