{"id":1467,"date":"2020-04-07T23:39:16","date_gmt":"2020-04-08T05:39:16","guid":{"rendered":"https:\/\/www.jacobsoft.com.mx\/?p=1467"},"modified":"2025-02-20T13:37:49","modified_gmt":"2025-02-20T19:37:49","slug":"como-crear-un-servidor-https-con-node-js-y-express","status":"publish","type":"post","link":"https:\/\/www.jacobsoft.com.mx\/en\/como-crear-un-servidor-https-con-node-js-y-express\/","title":{"rendered":"C\u00f3mo crear un servidor https con Node.js y Express"},"content":{"rendered":"<p>Para crear un servidor web con <strong>Node.js<\/strong> Y<strong> Express <\/strong>que sirva a trav\u00e9s del protocolo <strong>https <\/strong>primero vamos a crear el servidor para http y posteriormente agregaremos los certificados SSL para levantarlo ahora con el protocolo https.<\/p>\n\n\n\n<figure class=\"wp-block-pullquote is-style-solid-color\"><blockquote><p>Si quieres ver el ejemplo en video, lo pongo al final del post<\/p><cite>JacobSoft<\/cite><\/blockquote><\/figure>\n\n\n\n<p>El primer paso es que debemos tener instalado <strong>Node.js<\/strong> with<strong> NPM<\/strong>, este \u00faltimo se instala al mismo tiempo de instalar Node.js dado que npm es el Node Package Manager. Podemos descargar esta aplicaci\u00f3n desde el sitio oficial dando click <a href=\"https:\/\/nodejs.org\/en\/\" target=\"_blank\" aria-label=\"aqu\u00ed (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"aioseop-link\">here<\/a><\/p>\n\n\n\n<p>Si ya tenemos instalado Node.js, el primer paso es crear una carpeta para el proyecto y abrir una ventana de<strong> l\u00ednea de com\u00e1ndos, terminal o consola<\/strong> y ubicarnos dentro de la carpeta del proyecto.<\/p>\n\n\n\n<p>Una vez dentro de la carpeta ejecutamos:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">npm init<\/pre>\n\n\n\n<p>Yo ejecut\u00e9 el comando dentro de la carpeta llamada servidor.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"711\" height=\"372\" src=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/consola_init.png\" alt=\"\" class=\"wp-image-1471\" srcset=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/consola_init.png 711w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/consola_init-300x157.png 300w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/consola_init-115x60.png 115w\" sizes=\"auto, (max-width: 711px) 100vw, 711px\" \/><\/figure>\n\n\n\n<p>Este comando generar\u00e1 un archivo con el nombre<strong> package.json<\/strong> que inicialmente va a contener la informaci\u00f3n del proyecto y posteriormente, tambi\u00e9n sus dependencias. Al inicializar el comando, la pantalla mostrar\u00e1 algunas preguntas con valores por defecto, que si damos enter sin escribir nada, se seleccionar\u00e1n autom\u00e1ticamente.<\/p>\n\n\n\n<p>Los datos que solicitar\u00e1 el proceso de generaci\u00f3n del proyecto son:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>package name: (servidor) <\/li><li>version: (1.0.0.)<\/li><li>description: servidor https con node y express<\/li><li>entry point: (index.js)<\/li><li>test command:<\/li><li>git repository:<\/li><li>keywords:<\/li><li>author: Jacob<\/li><li>license: (ISC)<\/li><\/ul>\n\n\n\n<p>Los valores entre par\u00e9ntesis son los valores por defecto y en donde no hay, como en el caso de la descripci\u00f3n y el autor, tenemos libertad de escribir la descripci\u00f3n que deseamos y el nombre del autor respectivamente, en la lista anterior, se puede ver lo que yo he escrito (s\u00f3lo la descripci\u00f3n y el autor) deje los dem\u00e1s valores por defecto.<\/p>\n\n\n\n<p>Al terminar muestra los siguiente:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"711\" height=\"372\" src=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/onsola_fin_init.png\" alt=\"\" class=\"wp-image-1474\" srcset=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/onsola_fin_init.png 711w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/onsola_fin_init-300x157.png 300w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/onsola_fin_init-115x60.png 115w\" sizes=\"auto, (max-width: 711px) 100vw, 711px\" \/><\/figure>\n\n\n\n<p>Muestra el resumen con los valores iniciales para el archivo packge.json preguntando si todo esta correcto, escribimos yes y continuamos con enter.<\/p>\n\n\n\n<p>El entry point es el archivo de inicio con el c\u00f3digo del servidor, hemos dejado index.js por lo que as\u00ed llamaremos al archivo de inicio.<\/p>\n\n\n\n<p>Si abrimos el archivo <strong>package.jso<\/strong>n que se cre\u00f3, vemos lo siguiente:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">{\n  \"name\": \"servidor\",\n  \"version\": \"1.0.0\",\n  \"description\": \"servidor https con node y express\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" &amp;&amp; exit 1\"\n  },\n  \"author\": \"Jacob\",\n  \"license\": \"ISC\"\n}<\/pre>\n\n\n\n<p>Justo lo que nos mostr\u00f3 el resumen en la consola o terminal de l\u00ednea de comandos.<\/p>\n\n\n\n<script async src=\"https:\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js?client=ca-pub-2380084220870127\"\n     crossorigin=\"anonymous\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block; text-align:center;\"\n     data-ad-layout=\"in-article\"\n     data-ad-format=\"fluid\"\n     data-ad-client=\"ca-pub-2380084220870127\"\n     data-ad-slot=\"2437322509\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n\n\n<h2 class=\"wp-block-heading\">Instalaci\u00f3n de Express<\/h2>\n\n\n\n<p>El siguiente paso es instalar <strong>Express <\/strong>de la siguiente manera:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>npm install --save express<\/code><\/pre>\n\n\n\n<p>Una vez que termina la instalaci\u00f3n nos muestra la siguiente informaci\u00f3n:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"711\" height=\"372\" src=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/instalacion-express.png\" alt=\"\" class=\"wp-image-1478\" srcset=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/instalacion-express.png 711w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/instalacion-express-300x157.png 300w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/instalacion-express-115x60.png 115w\" sizes=\"auto, (max-width: 711px) 100vw, 711px\" \/><\/figure>\n\n\n\n<p>Express se ha instalado <strong>correctamente <\/strong>junto con los paquetes y dependencias necesarias para su funcionamiento.<\/p>\n\n\n\n<p>En la carpeta del proyecto ahora tenemos lo siguiente:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"678\" height=\"425\" src=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/carpeta.png\" alt=\"\" class=\"wp-image-1479\" srcset=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/carpeta.png 678w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/carpeta-300x188.png 300w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/carpeta-96x60.png 96w\" sizes=\"auto, (max-width: 678px) 100vw, 678px\" \/><\/figure>\n\n\n\n<p>Podemos observar que ahora tenemos una carpeta y un nuevo archivo. La carpeta node_modules contiene todos los m\u00f3dulos y paquetes necesarios para el funcionamiento de express. El archivo<strong> package.json<\/strong> ahora contiene los siguiente:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">{\n  \"name\": \"servidor\",\n  \"version\": \"1.0.0\",\n  \"description\": \"servidor https con node y express\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" &amp;&amp; exit 1\"\n  },\n  \"author\": \"Jacob\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"express\": \"^4.17.1\"\n  }\n}\n<\/pre>\n\n\n\n<p>Observamos ahora una secci\u00f3n llamada: <strong>dependencies<\/strong>, la cual contiene informaci\u00f3n de la versi\u00f3n de express como dependencia de este proyecto.<\/p>\n\n\n\n<p>Con esto ya podemos crear un servidor <strong>http<\/strong>, pero vamos a instalar de una vez las dem\u00e1s dependencias: <strong>https <\/strong>para el manejo del servidor con <strong>SSL <\/strong>Y <strong>fs <\/strong>para acceso al sistema de archivos.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">npm install --save fs<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">npm install --save https<\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"711\" height=\"372\" src=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/fs-y-https.png\" alt=\"\" class=\"wp-image-1480\" srcset=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/fs-y-https.png 711w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/fs-y-https-300x157.png 300w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/fs-y-https-115x60.png 115w\" sizes=\"auto, (max-width: 711px) 100vw, 711px\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-preformatted\"><span class=\"has-inline-color has-vivid-green-cyan-color\">\/\/archivo package.json<\/span>\n{\n  \"name\": \"servidor\",\n  \"version\": \"1.0.0\",\n  \"description\": \"servidor https con node y express\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" &amp;&amp; exit 1\"\n  },\n  \"author\": \"Jacob\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"express\": \"^4.17.1\",\n    \"fs\": \"0.0.1-security\",\n    \"https\": \"^1.0.0\"\n  }\n}<\/pre>\n\n\n\n<p>Con las dependencias ya listas, vamos a crear el primer servidor <strong>http<\/strong>, para ello creamos el archivo <strong>index.js<\/strong> y escribimos lo siguiente:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><span class=\"has-inline-color has-vivid-green-cyan-color\">\/\/archivo index.js<\/span>\n<span class=\"has-inline-color has-vivid-cyan-blue-color\">var <\/span>express = <span class=\"has-inline-color has-vivid-cyan-blue-color\">require<\/span>('<span class=\"has-inline-color has-vivid-red-color\">express<\/span>');\n<span class=\"has-inline-color has-vivid-cyan-blue-color\">var<\/span> app = <span class=\"has-inline-color has-vivid-cyan-blue-color\">express<\/span>();\n\n<span class=\"has-inline-color has-vivid-cyan-blue-color\">const <\/span>PUERTO = <span class=\"has-inline-color has-vivid-purple-color\">80<\/span>;\n\napp.<span class=\"has-inline-color has-vivid-cyan-blue-color\">listen<\/span>(PUERTO, <span class=\"has-inline-color has-vivid-cyan-blue-color\">function<\/span>(){\n\t<span class=\"has-inline-color has-vivid-cyan-blue-color\">console<\/span>.<span class=\"has-inline-color has-vivid-cyan-blue-color\">log<\/span>('<span class=\"has-inline-color has-vivid-red-color\">Servidor http correindo en el puerto 80<\/span>');\n});\n\napp.<span class=\"has-inline-color has-vivid-cyan-blue-color\">get<\/span>('\/', <span class=\"has-inline-color has-vivid-cyan-blue-color\">function<\/span>(<span class=\"has-inline-color has-luminous-vivid-orange-color\">req<\/span>, <span class=\"has-inline-color has-luminous-vivid-orange-color\">res<\/span>){\n\tres.<span class=\"has-inline-color has-vivid-cyan-blue-color\">send<\/span>('<span class=\"has-inline-color has-vivid-red-color\">Hola, estas en la pagina inicial<\/span>');\n\t<span class=\"has-inline-color has-vivid-cyan-blue-color\">console<\/span>.<span class=\"has-inline-color has-vivid-cyan-blue-color\">log<\/span>('<span class=\"has-inline-color has-vivid-red-color\">Se recibio una petici\u00f3n get<\/span>');\n});<\/pre>\n\n\n\n<p>Tenemos nuestro primer servidor http corriendo en el puerto 80, si tienes alguna aplicaci\u00f3n (apache, IIS u otro) corriendo en el puerto 80, \u00fanicamente cambia el valor de la variable PUERTO, por alg\u00fan puerto disponible, por ejemplo 4000.<\/p>\n\n\n\n<p>Para ejecutar el servidor, en la ventana de com\u00e1ndos ejecutamos:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">node index.js<\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"711\" height=\"372\" src=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/servidor1.png\" alt=\"\" class=\"wp-image-1484\" srcset=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/servidor1.png 711w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/servidor1-300x157.png 300w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/servidor1-115x60.png 115w\" sizes=\"auto, (max-width: 711px) 100vw, 711px\" \/><\/figure>\n\n\n\n<p>La consola muestra que el servidor esta corriendo en el puerto 80. Si ahora, abrimos el navegador y colocamos en la barra del URL: http:\/\/localhost<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"689\" height=\"463\" src=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/navegador1.png\" alt=\"\" class=\"wp-image-1485\" srcset=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/navegador1.png 689w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/navegador1-300x202.png 300w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/navegador1-89x60.png 89w\" sizes=\"auto, (max-width: 689px) 100vw, 689px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"711\" height=\"372\" src=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/peticion1.png\" alt=\"\" class=\"wp-image-1486\" srcset=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/peticion1.png 711w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/peticion1-300x157.png 300w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/peticion1-115x60.png 115w\" sizes=\"auto, (max-width: 711px) 100vw, 711px\" \/><\/figure>\n\n\n\n<p>EL navegador muestra el mensaje indicando que estamos en la p\u00e1gina inicial y en la consola, el mensaje de que se recibi\u00f3 una petici\u00f3n tipo get.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<script async src=\"https:\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js?client=ca-pub-2380084220870127\"\n     crossorigin=\"anonymous\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block; text-align:center;\"\n     data-ad-layout=\"in-article\"\n     data-ad-format=\"fluid\"\n     data-ad-client=\"ca-pub-2380084220870127\"\n     data-ad-slot=\"2437322509\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Creaci\u00f3n del servidor https<\/h2>\n\n\n\n<p>Para crear un servidor web <strong>https <\/strong>necesitamos los archivos de los certificados <strong>SSL <\/strong>(crt y key) para el dominio que vamos a utilizar o podemos crear un certificado de pruebas <strong>autofirmado <\/strong>with <strong>OpenSSL<\/strong> nada m\u00e1s para desarrollar nuestro servidor y na vez concluido y probado reemplazamos los archivos <strong>crt <\/strong>Y <strong>key <\/strong>por los que correspondan al servidor donde vamos a desplegar el proyecto.<\/p>\n\n\n\n<p>Una vez creados los archivos del certificado autofirmado, los copiamos en la carpeta del proyecto: mi_certificado.crt y micertificado.key, (este \u00faltimo se puede convertir a .pem y funciona sin problema).<\/p>\n\n\n\n<p>Ahora vamos a modificar el archivo<strong> index.js<\/strong> de la siguiente forma:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><span class=\"has-inline-color has-vivid-green-cyan-color\">\/\/archivo index.js<\/span>\n<span class=\"has-inline-color has-vivid-cyan-blue-color\">var <\/span>express = <span class=\"has-inline-color has-vivid-cyan-blue-color\">require<\/span>('<span class=\"has-inline-color has-vivid-red-color\">express<\/span>');\n<span class=\"has-inline-color has-vivid-cyan-blue-color\">var <\/span>fs = <span class=\"has-inline-color has-vivid-cyan-blue-color\">require<\/span>('<span class=\"has-inline-color has-vivid-red-color\">fs<\/span>');\n<span class=\"has-inline-color has-vivid-cyan-blue-color\">var <\/span>https = <span class=\"has-inline-color has-vivid-cyan-blue-color\">require<\/span>('<span class=\"has-inline-color has-vivid-red-color\">https<\/span>');\n<span class=\"has-inline-color has-vivid-cyan-blue-color\">var<\/span> app = <span class=\"has-inline-color has-vivid-cyan-blue-color\">express<\/span>();\n\n<span class=\"has-inline-color has-vivid-cyan-blue-color\">const <\/span>PUERTO = <span class=\"has-inline-color has-vivid-purple-color\">443<\/span>;\n\nhttps.<span class=\"has-inline-color has-vivid-cyan-blue-color\">createServer<\/span>({\n   cert: fs.<span class=\"has-inline-color has-vivid-cyan-blue-color\">readFileSync<\/span>('<span class=\"has-inline-color has-vivid-red-color\">mi_certificado.crt<\/span>'),\n   key: fs.<span class=\"has-inline-color has-vivid-cyan-blue-color\">readFileSync<\/span>('<span class=\"has-inline-color has-vivid-red-color\">mi_certificado.key<\/span>')\n },app).<span class=\"has-inline-color has-vivid-cyan-blue-color\">listen<\/span>(PUERTO, <span class=\"has-inline-color has-vivid-cyan-blue-color\">function<\/span>(){\n\t<span class=\"has-inline-color has-vivid-cyan-blue-color\">console<\/span>.<span class=\"has-inline-color has-vivid-cyan-blue-color\">log<\/span>('<span class=\"has-inline-color has-vivid-red-color\">Servidor https correindo en el puerto 443<\/span>');\n});\n\napp.<span class=\"has-inline-color has-vivid-cyan-blue-color\">get<\/span>('\/', <span class=\"has-inline-color has-vivid-cyan-blue-color\">function<\/span>(<span class=\"has-inline-color has-luminous-vivid-orange-color\">req<\/span>, <span class=\"has-inline-color has-luminous-vivid-orange-color\">res<\/span>){\n\tres.<span class=\"has-inline-color has-vivid-cyan-blue-color\">send<\/span>('<span class=\"has-inline-color has-vivid-red-color\">Hola, estas en la pagina inicial<\/span>');\n\t<span class=\"has-inline-color has-vivid-cyan-blue-color\">console<\/span>.<span class=\"has-inline-color has-vivid-cyan-blue-color\">log<\/span>('<span class=\"has-inline-color has-vivid-red-color\">Se recibio una petici\u00f3n get a trav\u00e9s de https<\/span>');\n});<\/pre>\n\n\n\n<p>Con estos peque\u00f1os cambios, creamos el servidor https que ahora lo ponemos a escuchar en el puerto 443. Puedes seleccionar cualquier puerto disponible, incluso el mismo 4000 que mencion\u00e1bamos en la secci\u00f3n anterior.<\/p>\n\n\n\n<p>Para ejecutar el servidor nuevamente ejecutamos:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">node index.js<\/pre>\n\n\n\n<p>Si con el paso anterior, el servidor segu\u00eda corriendo, lo detenemos con Ctrl + c<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"711\" height=\"372\" src=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/inicio-servidor-https.png\" alt=\"\" class=\"wp-image-1492\" srcset=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/inicio-servidor-https.png 711w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/inicio-servidor-https-300x157.png 300w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/inicio-servidor-https-115x60.png 115w\" sizes=\"auto, (max-width: 711px) 100vw, 711px\" \/><\/figure>\n\n\n\n<p>Con el navegador, ahora entramos a <strong>https:\/\/localhost<\/strong> <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"689\" height=\"463\" src=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/navegador2.png\" alt=\"\" class=\"wp-image-1493\" srcset=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/navegador2.png 689w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/navegador2-300x202.png 300w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/navegador2-89x60.png 89w\" sizes=\"auto, (max-width: 689px) 100vw, 689px\" \/><\/figure>\n\n\n\n<p>Es importante mencionar, que aunque tengamos los certificados creados por una entidad certificadora, al ejecutar el servidor y acceder con el navegador utilizando el protocolo https, el mismo navegador nos indicar\u00e1 que no es un sitio seguro, como se ve en la imagen anterior, dado que no lo estamos corriendo bajo el dominio y\/o los certificados son autofirmados.<\/p>\n\n\n\n<p>El ejemplo es importante para saber como crear un servidor https con Node.js y express, a partir de ah\u00ed podr\u00e1s crear las funciones para todo tipo de peticiones.<\/p>\n\n\n\n<p>Si quieres ver el ejemplo sencillo en <strong>video <\/strong>lo puedes reproducir aqu\u00ed abajo y tambi\u00e9n puedes suscribirte a mi canal en <strong>Youtube<\/strong>, ch\u00e9calo <a aria-label=\"aqu\u00ed (opens in a new tab)\" href=\"https:\/\/www.youtube.com\/channel\/UCHQDZW3R0NqPyAE3kOccOAw\" target=\"_blank\" rel=\"noreferrer noopener\" class=\"aioseop-link\">here<\/a><\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"C\u00f3mo crear un Servidor https con Node.js y Express\" width=\"780\" height=\"439\" src=\"https:\/\/www.youtube.com\/embed\/x0uP3fTHMrw?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen><\/iframe>\n<\/div><\/figure>","protected":false},"excerpt":{"rendered":"<p>Para crear un servidor web con Node.js y Express que sirva a trav\u00e9s del protocolo &hellip; <\/p>","protected":false},"author":2,"featured_media":1468,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"advgb_blocks_editor_width":"","advgb_blocks_columns_visual_guide":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[5,48],"tags":[106,108,116,109,115,107,105,110,112,113,111],"class_list":["post-1467","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-javascript","category-programacion-web","tag-desarrollo-web","tag-express","tag-express-js","tag-javascript","tag-node-js","tag-nodejs","tag-programacion-web","tag-servidor","tag-servidor-http","tag-servidor-https","tag-servidor-web"],"aioseo_notices":[],"author_meta":{"display_name":"Jacob Avila Camacho","author_link":"https:\/\/www.jacobsoft.com.mx\/en\/author\/jacob-avila\/"},"featured_img":"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/node-js-736399_960_720-2-300x150.png","featured_image_src":"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/node-js-736399_960_720-2.png","featured_image_src_square":"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2020\/04\/node-js-736399_960_720-2.png","author_info":{"display_name":"Jacob Avila Camacho","author_link":"https:\/\/www.jacobsoft.com.mx\/en\/author\/jacob-avila\/"},"coauthors":[],"tax_additional":{"categories":{"linked":["<a href=\"https:\/\/www.jacobsoft.com.mx\/en\/category\/programacion-web\/javascript\/\" class=\"advgb-post-tax-term\">Javascript<\/a>","<a href=\"https:\/\/www.jacobsoft.com.mx\/en\/category\/programacion-web\/\" class=\"advgb-post-tax-term\">Programaci\u00f3n Web<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">Javascript<\/span>","<span class=\"advgb-post-tax-term\">Programaci\u00f3n Web<\/span>"]},"tags":{"linked":["<a href=\"https:\/\/www.jacobsoft.com.mx\/en\/category\/programacion-web\/\" class=\"advgb-post-tax-term\">desarrollo web<\/a>","<a href=\"https:\/\/www.jacobsoft.com.mx\/en\/category\/programacion-web\/\" class=\"advgb-post-tax-term\">express<\/a>","<a href=\"https:\/\/www.jacobsoft.com.mx\/en\/category\/programacion-web\/\" class=\"advgb-post-tax-term\">express.js<\/a>","<a href=\"https:\/\/www.jacobsoft.com.mx\/en\/category\/programacion-web\/\" class=\"advgb-post-tax-term\">javascript<\/a>","<a href=\"https:\/\/www.jacobsoft.com.mx\/en\/category\/programacion-web\/\" class=\"advgb-post-tax-term\">node.js<\/a>","<a href=\"https:\/\/www.jacobsoft.com.mx\/en\/category\/programacion-web\/\" class=\"advgb-post-tax-term\">nodejs<\/a>","<a href=\"https:\/\/www.jacobsoft.com.mx\/en\/category\/programacion-web\/\" class=\"advgb-post-tax-term\">programaci\u00f3n web<\/a>","<a href=\"https:\/\/www.jacobsoft.com.mx\/en\/category\/programacion-web\/\" class=\"advgb-post-tax-term\">servidor<\/a>","<a href=\"https:\/\/www.jacobsoft.com.mx\/en\/category\/programacion-web\/\" class=\"advgb-post-tax-term\">servidor http<\/a>","<a href=\"https:\/\/www.jacobsoft.com.mx\/en\/category\/programacion-web\/\" class=\"advgb-post-tax-term\">servidor https<\/a>","<a href=\"https:\/\/www.jacobsoft.com.mx\/en\/category\/programacion-web\/\" class=\"advgb-post-tax-term\">servidor web<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">desarrollo web<\/span>","<span class=\"advgb-post-tax-term\">express<\/span>","<span class=\"advgb-post-tax-term\">express.js<\/span>","<span class=\"advgb-post-tax-term\">javascript<\/span>","<span class=\"advgb-post-tax-term\">node.js<\/span>","<span class=\"advgb-post-tax-term\">nodejs<\/span>","<span class=\"advgb-post-tax-term\">programaci\u00f3n web<\/span>","<span class=\"advgb-post-tax-term\">servidor<\/span>","<span class=\"advgb-post-tax-term\">servidor http<\/span>","<span class=\"advgb-post-tax-term\">servidor https<\/span>","<span class=\"advgb-post-tax-term\">servidor web<\/span>"]}},"comment_count":"0","relative_dates":{"created":"Posted 6 years ago","modified":"Updated 1 year ago"},"absolute_dates":{"created":"Posted on April 7, 2020","modified":"Updated on February 20, 2025"},"absolute_dates_time":{"created":"Posted on April 7, 2020 11:39 pm","modified":"Updated on February 20, 2025 1:37 pm"},"featured_img_caption":"","series_order":"","_links":{"self":[{"href":"https:\/\/www.jacobsoft.com.mx\/en\/wp-json\/wp\/v2\/posts\/1467","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.jacobsoft.com.mx\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.jacobsoft.com.mx\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.jacobsoft.com.mx\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.jacobsoft.com.mx\/en\/wp-json\/wp\/v2\/comments?post=1467"}],"version-history":[{"count":22,"href":"https:\/\/www.jacobsoft.com.mx\/en\/wp-json\/wp\/v2\/posts\/1467\/revisions"}],"predecessor-version":[{"id":1795,"href":"https:\/\/www.jacobsoft.com.mx\/en\/wp-json\/wp\/v2\/posts\/1467\/revisions\/1795"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.jacobsoft.com.mx\/en\/wp-json\/wp\/v2\/media\/1468"}],"wp:attachment":[{"href":"https:\/\/www.jacobsoft.com.mx\/en\/wp-json\/wp\/v2\/media?parent=1467"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.jacobsoft.com.mx\/en\/wp-json\/wp\/v2\/categories?post=1467"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.jacobsoft.com.mx\/en\/wp-json\/wp\/v2\/tags?post=1467"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}