<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>TRXSALO</title><link>https://blog.trxsalo.xyz/</link><description>Recent content on TRXSALO</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><atom:link href="https://blog.trxsalo.xyz/index.xml" rel="self" type="application/rss+xml"/><item><title>Crea tu primer servidor web con Express y Typescript</title><link>https://blog.trxsalo.xyz/p/express-ts/</link><pubDate>Thu, 28 Dec 2023 23:15:12 -0400</pubDate><guid>https://blog.trxsalo.xyz/p/express-ts/</guid><description>&lt;img src="https://blog.trxsalo.xyz/p/express-ts/img/express.png" alt="Featured image of post Crea tu primer servidor web con Express y Typescript" />&lt;!-- galeria de imagen -->
&lt;h1 id="servidor-nodejs-con-express">Servidor Nodejs con Express&lt;/h1>
&lt;p>&lt;img src="https://blog.trxsalo.xyz/p/express-ts/img/nodejs.png"
width="1200"
height="720"
srcset="https://blog.trxsalo.xyz/p/express-ts/img/nodejs_huec02ee36bb6b775e5d562cdfb7de4e30_20966_480x0_resize_box_3.png 480w, https://blog.trxsalo.xyz/p/express-ts/img/nodejs_huec02ee36bb6b775e5d562cdfb7de4e30_20966_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="166"
data-flex-basis="400px"
> &lt;img src="https://blog.trxsalo.xyz/p/express-ts/img/express.png"
width="1400"
height="700"
srcset="https://blog.trxsalo.xyz/p/express-ts/img/express_huc1f39faf62fe7dce5cb7cedfb51cf89c_69682_480x0_resize_box_3.png 480w, https://blog.trxsalo.xyz/p/express-ts/img/express_huc1f39faf62fe7dce5cb7cedfb51cf89c_69682_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="200"
data-flex-basis="480px"
>&lt;/p>
&lt;h2 id="iniciando-el-proyecto-express">Iniciando el proyecto express&lt;/h2>
&lt;ul>
&lt;li>Puedes utilizar tu editor de código favorito, en mi caso estaré utizando &lt;strong>Visual Studio Code&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>Primero empezaremos creando la carpeta donde trabajaremos.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl"> mkdir express-server
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">cd&lt;/span> express-server
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Una vez dentro de la carpeta, iniciamos el proytecto Nodejs, lo cual creará el archivo de configuración &lt;strong>package.json&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl"> npm init
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="dependencias-del-proyecto">Dependencias del proyecto&lt;/h2>
&lt;ol>
&lt;li>
&lt;p>Dependecia de desarrollo. &lt;br>
Las dependencias de desarrollo, son las librerías que solo se utilizarán en el desarrollo de la aplicación, las cuales ya no se haran uso en producción.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl"> npm i typescript -D
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> npm i nodemon -D
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div> &lt;br>
&lt;ul>
&lt;li>
&lt;p>&lt;a class="link" href="https://www.npmjs.com/package/typescript" target="_blank" rel="noopener"
>Typescript&lt;/a> &lt;br>
En este proyecto utilizaremos Ts para desarrollar el servidor express.&lt;/p>
&lt;blockquote>
&lt;p>TypeScript es un lenguaje de programación fuertemente tipado que se basa en JavaScript y le brinda mejores herramientas a cualquier escala.&lt;br>
&amp;ndash;&lt;cite>&lt;a class="link" href="https://www.typescriptlang.org/" target="_blank" rel="noopener"
>Typescript &lt;/a>&lt;cite> &lt;br>&lt;/p>
&lt;/blockquote>
&lt;/li>
&lt;li>
&lt;p>&lt;a class="link" href="https://nodemon.io/" target="_blank" rel="noopener"
>Nodemon&lt;/a> &lt;br>
Nodemon nos falicitara al momento de desarrollar, ya que monitorea el proyecto por cualquier cambios, y reiniciará automáticamente el servidor.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>Depencias del proyecto &lt;br>
La siguiente dependecias son lo que requerirá el proyecto para funcionar correctamente.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl"> npm i morgan
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> npm i express
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> npm i dotenv
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ul>
&lt;li>
&lt;p>&lt;a class="link" href="https://www.npmjs.com/package/express" target="_blank" rel="noopener"
>Express&lt;/a> &lt;br>
Espress es una librería que nos permite construir un servidor para servir una página, aplicación web o api,
lo cual también se ha convertido en el estándar para desarrollo de aplicaciones backend con nodejs.&lt;br>&lt;/p>
&lt;blockquote>
&lt;p>Express.js, a veces también llamado «Express», es un framework de backend Node.js minimalista, rápido y similar a Sinatra, que proporciona características y herramientas robustas para desarrollar aplicaciones de backend escalables.&lt;br>
&amp;ndash;&lt;cite>&lt;a class="link" href="https://kinsta.com/es/base-de-conocimiento/que-es-express/" target="_blank" rel="noopener"
>Kinsta&lt;/a>&lt;/cite>&lt;/p>
&lt;/blockquote>
&lt;/li>
&lt;li>
&lt;p>&lt;a class="link" href="https://www.npmjs.com/package/morgan" target="_blank" rel="noopener"
>Morgan&lt;/a>&lt;br>&lt;/p>
&lt;p>Nos mostrara las solicitudes y respuestas del servidor, las cuales podemos
visualizar por consola.&lt;br>&lt;/p>
&lt;blockquote>
&lt;p>Morgan es un Middleware de nivel de solicitud HTTP. Es una gran herramienta que registra las requests junto con otra información dependiendo de su configuración y el ajuste preestablecido utilizado. Resulta muy útil durante la depuración y también si desea crear archivos de registro.&lt;br>
&amp;ndash;&lt;cite>&lt;a class="link" href="https://barcelonageeks.com/que-es-morgan-en-node-js/" target="_blank" rel="noopener"
>Rudeus G&lt;/a>&lt;/cite> &lt;br>&lt;/p>
&lt;/blockquote>
&lt;/li>
&lt;li>
&lt;p>&lt;a class="link" href="https://www.npmjs.com/package/dotenv" target="_blank" rel="noopener"
>Dotenv&lt;/a>&lt;br>&lt;br>
Para uso de variable de entorno.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>@Types&lt;br>&lt;/p>
&lt;p>Nos perimite el uso de tipado en las dependecias que instalemos&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl"> npm i @type/express -D
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> npm i @types/dotenv -D
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;/ol>
&lt;h2 id="configurando-typescript">Configurando Typescript&lt;/h2>
&lt;p>Para poder empezar utiliziar typescript en el proyecto, debemos hacer unas modifcaciones primero.&lt;br>&lt;/p>
&lt;p>En la raiz del proyecto ejecutaremos el siguiente comando.&lt;br>
Crea el archivo de configuracion typescript para compilar.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl"> npx tsc --init
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Una vez ejecutado el comando, abrimos el archivo &lt;strong>tsconfig.json&lt;/strong> para hacer algunas modificaciones.&lt;br>&lt;/p>
&lt;p>Dentro del archivo buscaremos lo siguiente para descomentarlo y agregar la siguiente configuración:&lt;br>
&lt;strong>rootDirt&lt;/strong> : Indica donde estarán los archivos typescript&lt;br>
&lt;strong>outDirt&lt;/strong> : Indica donde se guardaran los arhivos compilados&lt;br>&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;rootDir&amp;#34;&lt;/span>&lt;span class="err">:&lt;/span> &lt;span class="s2">&amp;#34;./src&amp;#34;&lt;/span>&lt;span class="err">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;outDir&amp;#34;&lt;/span>&lt;span class="err">:&lt;/span> &lt;span class="s2">&amp;#34;./dist&amp;#34;&lt;/span>&lt;span class="err">,&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Lo siguiente es opcional&lt;br>
&lt;strong>target&lt;/strong> : Indica a versión de javascript compilara los archivos typescript&lt;br>
Mi persona, trabajara con la version de 2019&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&lt;span class="line">&lt;span class="cl"> &lt;span class="err">/*&lt;/span> &lt;span class="err">Language&lt;/span> &lt;span class="err">and&lt;/span> &lt;span class="err">Environment&lt;/span> &lt;span class="err">*/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;target&amp;#34;&lt;/span>&lt;span class="err">:&lt;/span> &lt;span class="s2">&amp;#34;es2019&amp;#34;&lt;/span>&lt;span class="err">,&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Agregaremos lo siguiente al final, entre el último y penúltimo corchete&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;compilerOptions&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">....contenido&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;exclude&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;node_modules&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="configuración-de-nodemon">Configuración de Nodemon&lt;/h2>
&lt;p>En el directorio raiz del proyecto, crearemos el siguiente archivo.&lt;br>
&lt;strong>nodemon.json&lt;/strong>&lt;br>&lt;/p>
&lt;p>Y agrearemos las siguientes lineas.&lt;br>&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;watch&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;src&amp;#34;&lt;/span>&lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;ext&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;ts&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;ignore&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;src/**/*.spec.ts&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;exec&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;ts-node &amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ul>
&lt;li>watch : &lt;br>
Indicamos que carpeta estará observando por cambios.&lt;br>&lt;/li>
&lt;li>ext : &lt;br>
Cual serán las extención que estaremos observando por cambios.&lt;br>&lt;/li>
&lt;li>ignore :&lt;br>
Ignorar los que tengan las siguiente extención. &lt;br>&lt;/li>
&lt;li>exec :&lt;br>
El comando que ejecutará.&lt;br>&lt;/li>
&lt;/ul>
&lt;h2 id="configurando-el-packagejson">Configurando el Package.json&lt;/h2>
&lt;p>En la sección de script agregaremos los siguiente comando para ejecución.&lt;br>&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;scripts&amp;#34;&lt;/span>&lt;span class="err">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;build&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;tsc &amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;dev&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;nodemon src/index.ts&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;start&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;npm run build &amp;amp;&amp;amp; node dist/index.js&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>&lt;span class="err">,&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ul>
&lt;li>dev : &lt;br>
Este comando ejecutara el modo desarrollo, no compila a js , más puede ejecutar &lt;strong>*.ts&lt;/strong> gracias a la configuracion
que hicimos con nodemon.json&lt;/li>
&lt;li>build : &lt;br>
Este comado compila los hay en la carpeta &lt;strong>src&lt;/strong>&lt;/li>
&lt;li>start : &lt;br>
Compila y ejecuta el proyecto compilado&lt;/li>
&lt;/ul>
&lt;h2 id="estructura-de-carpetas">Estructura de carpetas&lt;/h2>
&lt;p>La siguiente estrutura que se utilizará.&lt;br>
(es básica, en el siguiente post, utilzaremos este mismo proyecto para realizar una &lt;strong>API&lt;/strong> y luego una aplicacion web con la estrucura &lt;strong>MVC&lt;/strong>)&lt;br>
&lt;img src="https://blog.trxsalo.xyz/p/express-ts/img/carpetas.png"
width="218"
height="382"
srcset="https://blog.trxsalo.xyz/p/express-ts/img/carpetas_hu7481b40ba52a48ef695c16915be750ba_18458_480x0_resize_box_3.png 480w, https://blog.trxsalo.xyz/p/express-ts/img/carpetas_hu7481b40ba52a48ef695c16915be750ba_18458_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="57"
data-flex-basis="136px"
>&lt;/p>
&lt;h2 id="listo-empezemos-a-codificar">Listo, empezemos a codificar!&lt;/h2>
&lt;ol>
&lt;li>app.ts &lt;br>
Dentro del archivo &lt;strong>app.ts&lt;/strong> creamos un clase, para instanciar un servidor express.&lt;br>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;span class="lnt">45
&lt;/span>&lt;span class="lnt">46
&lt;/span>&lt;span class="lnt">47
&lt;/span>&lt;span class="lnt">48
&lt;/span>&lt;span class="lnt">49
&lt;/span>&lt;span class="lnt">50
&lt;/span>&lt;span class="lnt">51
&lt;/span>&lt;span class="lnt">52
&lt;/span>&lt;span class="lnt">53
&lt;/span>&lt;span class="lnt">54
&lt;/span>&lt;span class="lnt">55
&lt;/span>&lt;span class="lnt">56
&lt;/span>&lt;span class="lnt">57
&lt;/span>&lt;span class="lnt">58
&lt;/span>&lt;span class="lnt">59
&lt;/span>&lt;span class="lnt">60
&lt;/span>&lt;span class="lnt">61
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="kr">import&lt;/span> &lt;span class="nx">express&lt;/span>&lt;span class="p">,{&lt;/span>&lt;span class="nx">Application&lt;/span>&lt;span class="p">}&lt;/span> &lt;span class="nx">from&lt;/span> &lt;span class="s2">&amp;#34;express&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">//Importamos express
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="kr">import&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="nx">as&lt;/span> &lt;span class="nx">dotenv&lt;/span> &lt;span class="nx">from&lt;/span> &lt;span class="s2">&amp;#34;dotenv&amp;#34;&lt;/span> &lt;span class="c1">// Importamos dotenv (si tenemos variables de entorno)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="kr">import&lt;/span> &lt;span class="nx">morgan&lt;/span> &lt;span class="nx">from&lt;/span> &lt;span class="s2">&amp;#34;morgan&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">//Importamos Morgan para logs por consola
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">dotenv&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">config&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="c1">// Cargamos las variables de entorno
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="cm">/**
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cm">* Clase Server
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cm">*/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">export&lt;/span> &lt;span class="kr">class&lt;/span> &lt;span class="nx">Server&lt;/span>&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">private&lt;/span> &lt;span class="nx">app&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="nx">Application&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="cm">/**
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cm"> *
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cm"> * @param port Especifica el puerto de escucha del servidor
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cm"> */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">constructor&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kr">private&lt;/span> &lt;span class="nx">port&lt;/span>&lt;span class="o">?:&lt;/span> &lt;span class="nx">number&lt;/span>&lt;span class="o">|&lt;/span> &lt;span class="nx">string&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">this&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">app&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">express&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="c1">//Iniciamos express
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">this&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">configuracion&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="c1">//Configuracion
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">this&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">listen&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="c1">//Escuchamos
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">this&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">middlewares&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="c1">//Middlewares
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">this&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">route&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="c1">// Espones las Rutas disponibles
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="cm">/**
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cm"> * Configuracion del puerto de escucha
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cm"> */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">configuracion&lt;/span>&lt;span class="p">(){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">this&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">app&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">set&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;port&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">this&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">port&lt;/span> &lt;span class="o">||&lt;/span> &lt;span class="nx">process&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">env&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">PORT&lt;/span> &lt;span class="o">||&lt;/span> &lt;span class="mi">8080&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="cm">/**
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cm"> * Escuchamos por el puerto que configuramos
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cm"> */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">async&lt;/span> &lt;span class="nx">listen&lt;/span> &lt;span class="p">(){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">await&lt;/span> &lt;span class="k">this&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">app&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">listen&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">this&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">app&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;port&amp;#34;&lt;/span>&lt;span class="p">));&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">log&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Servidor escuchando en el puerto:&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">this&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">app&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;port&amp;#34;&lt;/span>&lt;span class="p">));&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">//Middlewares
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">middlewares&lt;/span>&lt;span class="p">(){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">this&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">app&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">use&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">morgan&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;dev&amp;#34;&lt;/span>&lt;span class="p">));&lt;/span> &lt;span class="c1">// Mesaje por consola de las peticiones con estilo dev , puede mirar la documentacion de morgan para ver mas detalles
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">this&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">app&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">use&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">express&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">json&lt;/span>&lt;span class="p">());&lt;/span> &lt;span class="c1">// Permite leer el body de las peticiones
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// this.app.use(cors()); //Explicare en otro post por el momento
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// this.app.use(bodyParser.urlencoded({extended:true}));
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// this.app.use(cookieSession({
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// name:&amp;#34;trxsalo&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// secret: process.env.SECRET,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// httpOnly: true
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// }));
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="cm">/**
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cm"> * Rutas expuestas
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cm"> */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">route&lt;/span>&lt;span class="p">(){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">this&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">app&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">use&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;/&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">express&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="kr">static&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;public&amp;#34;&lt;/span>&lt;span class="p">));&lt;/span> &lt;span class="c1">//Publico la carpeta public, servira un index.html
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;/ol>
&lt;p>2.index.ts &lt;br>
En el archivo index.ts dentro de la carpeta src agregáremos las siguiente lineas de código.&lt;br>&lt;br>
Este será que levante el servidor express.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-js" data-lang="js">&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">import&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="nx">Server&lt;/span>&lt;span class="p">}&lt;/span> &lt;span class="nx">from&lt;/span> &lt;span class="s2">&amp;#34;./app&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">//importamos la clase server
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kr">async&lt;/span> &lt;span class="kd">function&lt;/span> &lt;span class="nx">main&lt;/span>&lt;span class="p">(){&lt;/span> &lt;span class="c1">//funcion principal
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kr">const&lt;/span> &lt;span class="nx">app&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="nx">Server&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="nx">Server&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="c1">//instanciamos la clase server
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">main&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="c1">//ejecutamos la funcion
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ol start="3">
&lt;li>Public/ &lt;br>
En la carpeta public , creamos un archivo &lt;strong>index.html&lt;/strong> que serviremos por defecto en nuestro servidor.&lt;br>&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-html" data-lang="html">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&amp;lt;!DOCTYPE html&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">html&lt;/span> &lt;span class="na">lang&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;en&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">head&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">meta&lt;/span> &lt;span class="na">charset&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;UTF-8&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">meta&lt;/span> &lt;span class="na">name&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;viewport&amp;#34;&lt;/span> &lt;span class="na">content&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;width=device-width, initial-scale=1.0&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">title&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>Page&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">title&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">head&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">body&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">h1&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>Hello World!!&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">h1&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">body&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">html&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Listo ya tenemos nuestro servidor Express escrito con typescript.&lt;br>
Ya podemos ejecutar el programa&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl"> npm run dev
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Podemos verifcarlo por consola.&lt;br>
&lt;img src="https://blog.trxsalo.xyz/p/express-ts/img/ejecucion.png"
width="1366"
height="768"
srcset="https://blog.trxsalo.xyz/p/express-ts/img/ejecucion_hu208687b7060ab3d218af457c99788931_181770_480x0_resize_box_3.png 480w, https://blog.trxsalo.xyz/p/express-ts/img/ejecucion_hu208687b7060ab3d218af457c99788931_181770_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="177"
data-flex-basis="426px"
>&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&amp;gt; nodemon src/index.ts
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">[&lt;/span>nodemon&lt;span class="o">]&lt;/span> 3.0.2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">[&lt;/span>nodemon&lt;span class="o">]&lt;/span> to restart at any time, enter &lt;span class="sb">`&lt;/span>rs&lt;span class="sb">`&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">[&lt;/span>nodemon&lt;span class="o">]&lt;/span> watching path&lt;span class="o">(&lt;/span>s&lt;span class="o">)&lt;/span>: src/**/*
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">[&lt;/span>nodemon&lt;span class="o">]&lt;/span> watching extensions: ts
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">[&lt;/span>nodemon&lt;span class="o">]&lt;/span> starting &lt;span class="sb">`&lt;/span>ts-node src/index.ts&lt;span class="sb">`&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Servidor escuchando en el puerto: &lt;span class="m">8080&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Ahí nos ínidica en que puerto esta escuchando el servidor.&lt;br>
Vamos a nuestro navegador favorito, he ingresamos a la siguiente url&lt;/p>
&lt;blockquote>
&lt;p>localhost:(puerto que configuramos)&lt;/p>
&lt;/blockquote>
&lt;p>Si vamos al link observaremos lo siguiente.&lt;br>
&lt;img src="https://blog.trxsalo.xyz/p/express-ts/img/local.png"
width="1366"
height="768"
srcset="https://blog.trxsalo.xyz/p/express-ts/img/local_hu2e35b3bf6d6c50e29a654239777f68c4_32294_480x0_resize_box_3.png 480w, https://blog.trxsalo.xyz/p/express-ts/img/local_hu2e35b3bf6d6c50e29a654239777f68c4_32294_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="177"
data-flex-basis="426px"
>&lt;/p>
&lt;p>Listo ya temos nuestro servidor web sirviendo un documento html, ya tenéis su primera página web.&lt;express>&lt;/p>
&lt;p>Link del repositorio&lt;br>&lt;/p>
&lt;blockquote>
&lt;p>&lt;a class="link" href="https://github.com/trxsalo/SERVER-TS-EXPRESS-CLEAN/" target="_blank" rel="noopener"
>Github&lt;/a>&lt;br>&lt;/p>
&lt;/blockquote></description></item><item><title>Como subir tu proyecto Hugo a Netlify</title><link>https://blog.trxsalo.xyz/p/hugo-public/</link><pubDate>Sat, 11 Nov 2023 00:00:00 +0000</pubDate><guid>https://blog.trxsalo.xyz/p/hugo-public/</guid><description>&lt;img src="https://blog.trxsalo.xyz/p/hugo-public/img/hugo1.png" alt="Featured image of post Como subir tu proyecto Hugo a Netlify" />&lt;h1 id="que-es-hugo-httpsgohugoioaboutwhat-is-hugo">Que es &lt;a class="link" href="https://gohugo.io/about/what-is-hugo/" target="_blank" rel="noopener"
>Hugo&lt;/a>?&lt;/h1>
&lt;p>Hugo es un generador de sitios estáticos, muy veloz y sencillo de usar. Los sitios generados con Hugo se pueden alojar en distinto servicio de hosting, como: &lt;a class="link" href="https://www.netlify.com/" target="_blank" rel="noopener"
> Neflify&lt;/a>, &lt;a class="link" href="https://www.heroku.com/" target="_blank" rel="noopener"
>Heroku&lt;/a>, &lt;a class="link" href="https://www.godaddy.com/es" target="_blank" rel="noopener"
>GoDaddy&lt;/a>, &lt;a class="link" href="https://pages.github.com/" target="_blank" rel="noopener"
>GitHub Pages&lt;/a>, &lt;a class="link" href="https://aws.amazon.com/es/s3/" target="_blank" rel="noopener"
>Amazon S3&lt;/a>,entre otros muchos más.
Hugo es ideal para crear un blog, un sitio de cartera o de empresa y documentación.&lt;/p>
&lt;h1 id="netlify">Netlify&lt;/h1>
&lt;p>Es un servicio de host en la nube, permite subir proyecto de una manera tan simple y rápida.
En tan solo unos poco click, ya tendremos listo nuestro proyecto en la internet.&lt;/p>
&lt;h2 id="configurando-nuestro-proyecto-hugo">Configurando nuestro proyecto Hugo&lt;/h2>
&lt;p>Una vez que tengamos listo nuestro proyecto para publicar, hay que hacer algunos cambios de los siguientes archivos, depende de tu proyecto Hugo o plantilla que escogiste.&lt;br>
&lt;strong>config.toml&lt;/strong> o &lt;strong>theme.toml&lt;/strong>&lt;br>&lt;/p>
&lt;ul>
&lt;li>config.toml &lt;br>&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-toml" data-lang="toml">&lt;span class="line">&lt;span class="cl"> &lt;span class="c"># Change baseurl before deploy&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">baseurl&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;https://my-site-name.netlify.app&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ul>
&lt;li>theme.toml &lt;br>&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-toml" data-lang="toml">&lt;span class="line">&lt;span class="cl"> &lt;span class="c"># Change baseurl before deploy&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">homepage&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;https://my-site-name.netlify.app&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="lloguearse-en-netlify">Lloguearse en Netlify&lt;/h3>
&lt;p>En mi caso estaré logueandome con mi cuenta de GitHub&lt;br>
&lt;img src="https://blog.trxsalo.xyz/p/hugo-public/img/login.png"
width="1366"
height="723"
srcset="https://blog.trxsalo.xyz/p/hugo-public/img/login_huf980b88402a985d1b2ea00b2029e00d9_50539_480x0_resize_box_3.png 480w, https://blog.trxsalo.xyz/p/hugo-public/img/login_huf980b88402a985d1b2ea00b2029e00d9_50539_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="188"
data-flex-basis="453px"
>&lt;/p>
&lt;h2 id="subir-proyecto">Subir proyecto&lt;/h2>
&lt;p>Una vez logueado, buscado la opción de &lt;strong>new site&lt;/strong>, hacemos click sobre el botón, y seleccionamos, importar un proyecto existente, el proyecto Hugo que deseamos subir, debe estar ya en dicho repositorio que usan.&lt;br>&lt;/p>
&lt;p>&lt;img src="https://blog.trxsalo.xyz/p/hugo-public/img/add.png"
width="1354"
height="721"
srcset="https://blog.trxsalo.xyz/p/hugo-public/img/add_hu908241db830982271650f2509f3f7e08_154416_480x0_resize_box_3.png 480w, https://blog.trxsalo.xyz/p/hugo-public/img/add_hu908241db830982271650f2509f3f7e08_154416_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="187"
data-flex-basis="450px"
>&lt;img src="https://blog.trxsalo.xyz/p/hugo-public/img/add1.png"
width="424"
height="117"
srcset="https://blog.trxsalo.xyz/p/hugo-public/img/add1_hud884ad408b109714e7e537b7a5f167fa_14243_480x0_resize_box_3.png 480w, https://blog.trxsalo.xyz/p/hugo-public/img/add1_hud884ad408b109714e7e537b7a5f167fa_14243_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="362"
data-flex-basis="869px"
>&lt;/p>
&lt;p>Mi persona seleccionara &lt;strong>Deploy with GitHub&lt;/strong>&lt;/p>
&lt;p>&lt;img src="https://blog.trxsalo.xyz/p/hugo-public/img/select-repo.png"
width="1366"
height="724"
srcset="https://blog.trxsalo.xyz/p/hugo-public/img/select-repo_hu5fa48732901299972842b9d9cfa90af3_127478_480x0_resize_box_3.png 480w, https://blog.trxsalo.xyz/p/hugo-public/img/select-repo_hu5fa48732901299972842b9d9cfa90af3_127478_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="188"
data-flex-basis="452px"
>&lt;/p>
&lt;p>Luego debemos buscar el proyecto que deseamos hacer el deploy.&lt;br>&lt;/p>
&lt;p>&lt;img src="https://blog.trxsalo.xyz/p/hugo-public/img/proyect.png"
width="733"
height="254"
srcset="https://blog.trxsalo.xyz/p/hugo-public/img/proyect_hu33b876ba760b20bdf69726d47d26e2d2_15788_480x0_resize_box_3.png 480w, https://blog.trxsalo.xyz/p/hugo-public/img/proyect_hu33b876ba760b20bdf69726d47d26e2d2_15788_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="288"
data-flex-basis="692px"
>&lt;/p>
&lt;h2 id="build-settings">Build settings&lt;/h2>
&lt;p>Una ves selecionado el proyecto, se debe configurar para que se pueda realizar correctamente el build del proyecto.&lt;/p>
&lt;p>&lt;img src="https://blog.trxsalo.xyz/p/hugo-public/img/config.png"
width="1366"
height="720"
srcset="https://blog.trxsalo.xyz/p/hugo-public/img/config_hu7b3530d98ecf6b0b32fbd6a5d11d72eb_131992_480x0_resize_box_3.png 480w, https://blog.trxsalo.xyz/p/hugo-public/img/config_hu7b3530d98ecf6b0b32fbd6a5d11d72eb_131992_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="189"
data-flex-basis="455px"
>&lt;/p>
&lt;ul>
&lt;li>Base directory&lt;br>
Diremos que será la raíz del proyecto &lt;strong>&amp;quot;/&amp;quot;&lt;/strong>&lt;br>&lt;/li>
&lt;li>Build command&lt;br>
El comando que debe ejecutarse&lt;br>&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl"> hugo --gc --minify
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ul>
&lt;li>Publish directory &lt;br>
Aquí escribiremos la ruta del directorio donde están los posts del blog. &lt;br>
En Hugo por lo general están en la carpeta &lt;strong>/content&lt;/strong> o dejar vacío por defecto.&lt;/li>
&lt;/ul>
&lt;p>Listo ya esta para realizar el deploy
&lt;img src="https://blog.trxsalo.xyz/p/hugo-public/img/deploy.png"
width="731"
height="444"
srcset="https://blog.trxsalo.xyz/p/hugo-public/img/deploy_hu3e5e31bb8abbb4b489416f5d3901f853_17847_480x0_resize_box_3.png 480w, https://blog.trxsalo.xyz/p/hugo-public/img/deploy_hu3e5e31bb8abbb4b489416f5d3901f853_17847_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="164"
data-flex-basis="395px"
> &lt;br>
&lt;img src="https://blog.trxsalo.xyz/p/hugo-public/img/deploy1.png"
width="1366"
height="718"
srcset="https://blog.trxsalo.xyz/p/hugo-public/img/deploy1_hu87b044672c6b2fc0d45bc547acceb087_112082_480x0_resize_box_3.png 480w, https://blog.trxsalo.xyz/p/hugo-public/img/deploy1_hu87b044672c6b2fc0d45bc547acceb087_112082_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="190"
data-flex-basis="456px"
>&lt;/p>
&lt;p>Listo el proyecto Hugo ya esta.
&lt;img src="https://blog.trxsalo.xyz/p/hugo-public/img/deploy2.png"
width="1366"
height="720"
srcset="https://blog.trxsalo.xyz/p/hugo-public/img/deploy2_hu3fce60bf264f5bd4ca0ddd818caabf47_116879_480x0_resize_box_3.png 480w, https://blog.trxsalo.xyz/p/hugo-public/img/deploy2_hu3fce60bf264f5bd4ca0ddd818caabf47_116879_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="189"
data-flex-basis="455px"
>&lt;/p>
&lt;h2 id="cambiar-nombre">Cambiar nombre&lt;/h2>
&lt;p>Netlify le asigna un nombre aleatorio al sitio que desplegamos, no dirigiremos a &lt;strong>configuración del sitio&lt;/strong> y seleccionamos &lt;strong>Cambiar nombre del sitio&lt;/strong>, ahí cambiamos al nombre que especificamos en la configuración de Hugo.
&lt;img src="https://blog.trxsalo.xyz/p/hugo-public/img/change-name.png"
width="1364"
height="663"
srcset="https://blog.trxsalo.xyz/p/hugo-public/img/change-name_hu9f9ef89dac8aacf78f39e32f3997ce28_104190_480x0_resize_box_3.png 480w, https://blog.trxsalo.xyz/p/hugo-public/img/change-name_hu9f9ef89dac8aacf78f39e32f3997ce28_104190_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="205"
data-flex-basis="493px"
>&lt;/p>
&lt;p>&lt;img src="https://blog.trxsalo.xyz/p/hugo-public/img/change-name1.png"
width="1366"
height="691"
srcset="https://blog.trxsalo.xyz/p/hugo-public/img/change-name1_hu959eb04f6ec8a644dc11c6f7635f1d6f_105230_480x0_resize_box_3.png 480w, https://blog.trxsalo.xyz/p/hugo-public/img/change-name1_hu959eb04f6ec8a644dc11c6f7635f1d6f_105230_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="197"
data-flex-basis="474px"
>&lt;/p>
&lt;blockquote>
&lt;p>Listo ya está nuestro sitio con Hugo desplegado.&lt;/p>
&lt;/blockquote></description></item><item><title>Archives</title><link>https://blog.trxsalo.xyz/archives/</link><pubDate>Sun, 06 Mar 2022 00:00:00 +0000</pubDate><guid>https://blog.trxsalo.xyz/archives/</guid><description/></item><item><title>Redes Sociales</title><link>https://blog.trxsalo.xyz/redes-sociales/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://blog.trxsalo.xyz/redes-sociales/</guid><description>&lt;p>Hola, me pueden decir SALOME, soy boliviano actualmento trabajo como desarrollador en una empresa
aquí en bolvia. Mi pasatiempo es leer, ilustrar (si soy un artista :3 , siguemé!!).
En este blog principalmente estare compartiendo contenido de mi experiencias y algunos tutoriales en la área
de tecnología y desarrollo de software ;v&lt;/p>
&lt;!-- ```yaml
links:
- title: GitHub
description: GitHub is the world's largest software development platform.
website: https://github.com
image: https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png
- title: TypeScript
description: TypeScript is a typed superset of JavaScript that compiles to plain JavaScript.
website: https://www.typescriptlang.org
image: ts-logo-128.jpg
``` -->
&lt;!-- `image` field accepts both local and external images. --></description></item><item><title>Search</title><link>https://blog.trxsalo.xyz/search/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://blog.trxsalo.xyz/search/</guid><description/></item></channel></rss>