<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arquivos Mão na massa - Resenha do dev</title>
	<atom:link href="https://www.lucianojr.com/category/mao-na-massa/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.lucianojr.com/category/mao-na-massa/</link>
	<description>por Luciano Manerich</description>
	<lastBuildDate>Fri, 24 Feb 2023 13:43:48 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.2.2</generator>
	<item>
		<title>Rotas no Angular + S3 + CloudFront?</title>
		<link>https://www.lucianojr.com/rotas-no-angular-s3-cloudfront/</link>
					<comments>https://www.lucianojr.com/rotas-no-angular-s3-cloudfront/#comments</comments>
		
		<dc:creator><![CDATA[Luciano Manerich]]></dc:creator>
		<pubDate>Wed, 22 Feb 2023 19:34:01 +0000</pubDate>
				<category><![CDATA[Mão na massa]]></category>
		<category><![CDATA[Problemas]]></category>
		<category><![CDATA[angular]]></category>
		<category><![CDATA[aws]]></category>
		<category><![CDATA[cloudfront]]></category>
		<category><![CDATA[s3]]></category>
		<guid isPermaLink="false">https://www.lucianojr.com/?p=910</guid>

					<description><![CDATA[<p>Durante a navegação sua aplicação está funcionando corretamente, mas ao atualizar a página, ou carregar o endereço da barra de favoritos você recebe o famoso...</p>
<p>O post <a rel="nofollow" href="https://www.lucianojr.com/rotas-no-angular-s3-cloudfront/">Rotas no Angular + S3 + CloudFront?</a> apareceu primeiro em <a rel="nofollow" href="https://www.lucianojr.com">Resenha do dev</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Durante a navegação sua aplicação está funcionando corretamente, mas ao atualizar a página, ou carregar o endereço da barra de favoritos você recebe o famoso erro 404 de página não encontrada? Esse problema ocorre ao usar rotas no Angular e hospedar a aplicação atrás de uma <a href="https://www.lucianojr.com/tag/cloudfront/">distribuição do CloudFront</a>.</p>



<span id="more-910"></span>



<p>Existe uma pequna configuração a ser feita no <a href="https://www.lucianojr.com/tag/cloudfront/">CloudFront</a> para enviar quaisquer links não encontrados como arquivos físicos no <a href="https://www.lucianojr.com/tag/s3/">S3</a> para sua aplicação interpretar e realizar a navegação por rotas.</p>



<p>Para simular o problema, vamos utilizar a <a href="https://angular.io/guide/router-tutorial" target="_blank" rel="noreferrer noopener">aplicação exemplo</a> para rotas Angular, mas fique a vontade para usar a sua e simplesmente testar a solução.</p>



<h2 class="wp-block-heading">Projeto Angular</h2>



<p>Após realizar o download do projeto, executei os seguintes comandos:</p>



<pre class="wp-block-code"><code>npm install
npm run build</code></pre>



<p>Ao finalizar, será criada a pasta &#8220;dist/&#8221; na raiz do seu projeto. Iremos subir todos os arquivos dessa página em um <a href="https://www.lucianojr.com/tag/s3/">Bucket S3</a>.</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-bucket-979x1024.png" alt="Lista de arquivos no bucket S3" class="wp-image-931" width="490" height="512" srcset="https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-bucket-979x1024.png 979w, https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-bucket-287x300.png 287w, https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-bucket-768x803.png 768w, https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-bucket.png 1134w" sizes="(max-width: 490px) 100vw, 490px" /></figure>



<h2 class="wp-block-heading">Aplicação</h2>



<p>Conseguimos acessar e utilizar toda a aplicação.</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-app-running-1024x620.png" alt="Aplicação Angular de exemplo de rota" class="wp-image-932" width="512" height="310" srcset="https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-app-running-1024x620.png 1024w, https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-app-running-300x182.png 300w, https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-app-running-768x465.png 768w, https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-app-running.png 1060w" sizes="(max-width: 512px) 100vw, 512px" /></figure>



<p>Mas, infelizmente, ao tentar atualizar a página ou acessar por um link de rota, recebemos o seguinte erro:</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-app-error-404-1024x280.png" alt="Erro do CloudFront para uma rota Angular" class="wp-image-933" width="768" height="210" srcset="https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-app-error-404-1024x280.png 1024w, https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-app-error-404-300x82.png 300w, https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-app-error-404-768x210.png 768w, https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-app-error-404-1536x419.png 1536w, https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-app-error-404.png 1590w" sizes="(max-width: 768px) 100vw, 768px" /></figure>



<p>Tudo bem, sem pânico, a solução para esse problema é muito simples. Mas primeiro, vamos entender por que ele acontence.</p>



<p>Ao navegar pelas rotas Angular, a aplicação utiliza a própria URL para servir como histórico e ponto de entrada direto na aplicação. Em outros servidores web como <a href="https://httpd.apache.org/" target="_blank" rel="noreferrer noopener">Apache</a> e <a href="https://www.nginx.com/" target="_blank" rel="noreferrer noopener">NGinx</a> existe uma configuração adicional para enviar a URL acessada para a aplicação Angular escolher fazer com ela. Sem essa configuração o servidor web irá simplementes tentar buscar o arquivo em disco.</p>



<h2 class="wp-block-heading">Configuração no CloudFront</h2>



<p>No <a href="https://www.lucianojr.com/tag/cloudfront/">CloudFront</a> é necessário exatamente a mesma configuração, para aplicá-la, faça o seguinte:</p>



<p>Vá até a sua distribuição do <a href="https://www.lucianojr.com/tag/cloudfront/">CloudFront</a>, navegue para a aba &#8220;Error Pages&#8221; e crie uma nova resposta customizada com os seguintes valores:</p>



<figure class="wp-block-image size-large is-resized is-style-default"><img decoding="async" src="https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-custom-error-response-1024x878.png" alt="Criação de uma resposta de erro customizada" class="wp-image-934" width="768" height="659" srcset="https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-custom-error-response-1024x878.png 1024w, https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-custom-error-response-300x257.png 300w, https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-custom-error-response-768x658.png 768w, https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-custom-error-response-1536x1317.png 1536w, https://www.lucianojr.com/wp-content/uploads/2023/02/angular-router-custom-error-response.png 1680w" sizes="(max-width: 768px) 100vw, 768px" /></figure>



<p>Vamos entender o motivo de cada configuração:</p>



<p>Mapeamos o erro 404 pois ele é o erro referente a um arquivo não encontrado fisicamente (não existe o arquivo &#8220;hero-list&#8221; no <a href="https://www.lucianojr.com/tag/s3/">Bucket S3</a>).</p>



<p>Customizamos então a resposta para carregar o arquivo &#8220;index.html&#8221; (arquivo inicial da aplicação Angular) e em seguida iremos informar ao navegador do usuário que não houve erro, por isso o novo código 200.</p>



<p>Assim carregaremos a aplicação angular normalmente com a URL que o usuário tentou acessar.</p>



<p>PS: Caso você possua uma tela de erro de permissão ou login customizada você pode criar mais uma resposta customizado para o erro 403 e tratar a rota no Angular.</p>
<p>O post <a rel="nofollow" href="https://www.lucianojr.com/rotas-no-angular-s3-cloudfront/">Rotas no Angular + S3 + CloudFront?</a> apareceu primeiro em <a rel="nofollow" href="https://www.lucianojr.com">Resenha do dev</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.lucianojr.com/rotas-no-angular-s3-cloudfront/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
