Quando estamos desenvolvendo com módulos JavaScript e trabalhando com diferentes origens (cross-origin), dois desafios comuns surgem: a configuração de CORS (Cross-Origin Resource Sharing) e a correção do erro de MIME type ao carregar módulos. Vamos resolver esses problemas de uma vez!
Problema 1: CORS – Permitir Requisições Entre Diferentes Origens
O CORS é um mecanismo de segurança que permite ou bloqueia requisições feitas por um domínio diferente do seu servidor. Para configurar isso no seu servidor, adicione o seguinte no seu arquivo .htaccess
(se estiver usando Apache):
Certifique-se de que o módulo headers está ativado no Apache, se não estiver, ative-o com a2enmod headers
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
Header set Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept, Authorization"
</IfModule>
Explicação:
- O Access-Control-Allow-Origin com o valor
*
permite que qualquer origem possa acessar os seus recursos. - O Access-Control-Allow-Methods define os métodos HTTP permitidos.
- O Access-Control-Allow-Headers permite o uso de cabeçalhos personalizados, como Authorization.
Se estiver usando Nginx, a configuração seria diferente. Adicione ao arquivo de configuração:
types {
application/javascript js mjs;
}
Essa configuração de CORS é fundamental quando você precisa compartilhar recursos entre diferentes domínios.
Problema 2: Erro de MIME Type ao Carregar Módulos JavaScript
Se você já configurou CORS corretamente, mas ainda está recebendo um erro como:
Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of "".
Isso indica que o seu servidor não está configurado para servir os módulos JavaScript corretamente com o tipo MIME adequado. Para resolver isso, você precisa garantir que o servidor envie o tipo MIME correto para arquivos .js
e .mjs
.
Se você usa Apache:
Adicione essa linha no seu arquivo .htaccess
:
<IfModule mod_mime.c>
AddType application/javascript .js .mjs
</IfModule>
Isso vai garantir que os arquivos .js
e .mjs
sejam tratados corretamente como módulos JavaScript pelo servidor.
Se você usa Nginx:
No arquivo de configuração do Nginx, adicione:
types {
application/javascript js mjs;
}
Isso também configura o servidor para tratar .js
e .mjs
como application/javascript.
Passo Final: Garanta a Tag <script>
Correta no HTML
Agora, ao carregar o seu módulo JavaScript no HTML, use a tag <script>
com type="module"
:
<script type="module" src="path/to/your/script.mjs"></script>
Isso vai garantir que o navegador trate o arquivo como um módulo ES6.
Conclusão
Com a configuração adequada de CORS e MIME types, você pode facilmente permitir que o seu servidor aceite requisições de outras origens e que os módulos JavaScript sejam carregados corretamente. Ao implementar isso, você evita os problemas mais comuns que surgem com o uso de módulos e acessos cross-origin.
Dica extra: Não se esqueça de testar sua aplicação localmente com servidores como http-server ou Live Server para garantir que tudo esteja funcionando corretamente antes de subir para produção!