arquivos estaticos

Melhor maneira de entregar arquivos estáticos Express

Introdução

Com o Express, é possível entregar os arquivos estáticos de forma separada no sistema. E isso é importante porque você consegue dizer para o servidor, exatamente quais arquivos não precisam de um processamento, mas sim que ele só seja entregue para uso.

Dessa forma o servidor vai entender que aquele arquivo, não requer nenhum tipo de lógica ou processamento para ser entregue, ele simplesmente é mostrado na tela para o usuário.

Os arquivos estáticos podem ser fotos, arquivos, folhas de estilo css, arquivos javascript, arquivos somente com HTML e entre outros.

Sobre o Express static

O express.static é um middleware que é integrado ao express e que permite indicar onde estarão os arquivos estáticos a serem carregados.

É possível fazer a configuração somente uma vez, e normalmente é feita dentro do arquivo principal do sistema, que pode ser o server.js, main.js, index.js, depende de como configurou seu sistema.

Essa configuração indica o diretório do servidor no qual estão os arquivos estáticos, com isso, sempre que no código tiver referência a uma imagem por exemplo, o servidor sabe que precisa ir buscar para o diretório que foi configurado.

Normalmente é configurado só um diretório e com o nome public, dessa forma:

app.use(express.static('public'));

Com essa configuração acima é possível carregar todos arquivos dentro do diretório public

http://localhost:3000/images/kitten.jpg
http://localhost:3000/css/style.css
http://localhost:3000/js/app.js
http://localhost:3000/images/bg.png
http://localhost:3000/hello.html

Repare que dentro do diretório public, os arquivos podem ser separados em subdiretórios para facilitar o entendimento de onde cada um estará, por exemplo, dentro de public pode ter um diretório images que indica que lá estarão as imagens do sistema.

Configurando mais de um diretório público

Caso queira, é possível configurar mais de um diretório de arquivos estáticos, pode ser utilizado para caso tenha uma subdivisão maior dos arquivos.

Por exemplo, as imagens ficam em um diretório, já os arquivos PDF que são os termos de contrato do sistema ficam em outro, só que não dentro do mesmo diretório, então assim é melhor dizer que os dois diretórios são de arquivos estáticos, dessa forma:

app.use(express.static('images'));
app.use(express.static('contracts'));

Nesse caso, o Express executa a leitura dos arquivos estáticos na ordem que foi declarado, ou seja, no caso o diretório images será lido antes que o diretório contracts.

Na prática isso quase não tem diferença, mas você pode organizar seus diretórios de maneira que o que tenha menos arquivos carregue primeiro por ser mais rápido.

Configurando um prefixo

Quando é configurado o diretório public por exemplo, esse diretório não aparece no caminho do arquivo, é possível acessá-lo fazendo somente:

http://localhost:3000/images/kitten.jpg

Caso você queira indicar que este arquivo é um estático, é possível colocar um prefixo na URL para fazer esse controle.

Esse prefixo é um caminho virtual, ele não existirá na estrutura de arquivos do servidor, é somente para indicar que aquele é um arquivo estático mesmo.

Para o exemplo, o caminho virtual de prefixo que vou colocar vai ser o /static, e o código ficará assim:

app.use('/static', express.static('public'));

Agora para acessar os arquivos precisa fazer:

http://localhost:3000/static/images/kitten.jpg
http://localhost:3000/static/css/style.css
http://localhost:3000/static/js/app.js
http://localhost:3000/static/images/bg.png
http://localhost:3000/static/hello.html

Lembrando que esse caminho é virtual, ele não vai existir nos diretórios. Para uma segurança maior e ter certeza que o public está relacionado ao diretório raiz de onde o app Node foi iniciado, é uma boa prática usar o caminho absoluto do diretório que será entregue:

app.use('/static', express.static(__dirname + '/public'));

O __dirname faz essa função de obter o caminho absoluto, evitando problemas com a referenciação do diretório.

Vídeo sobre o assunto

Para ver outros canais onde o posto conteúdo, meu Github e também cursos, veja os Links do Programando Soluções.

Conclusão

É uma boa prática configurar o servidor para mostrar os arquivos estáticos separado, isso pode trazer um ganho de performance, além de uma separação melhor dos arquivos, até o próximo post 🙂

Referências

https://imasters.com.br/back-end/padroes-de-web-api-parte-02-middleware#:~:text=Um%20middleware%20nada%20mais%20%C3%A9,do%20request%20atrav%C3%A9s%20de%20delegates.&text=%C3%89%20poss%C3%ADvel%20configurar%20diversos%20middlewares,ordem%20na%20qual%20ser%C3%A3o%20executados.

https://expressjs.com/pt-br/starter/static-files.html

https://expressjs.com/pt-br/advanced/best-practice-performance.html

Este conteúdo te ajudou de alguma forma?

Usamos cookies para lhe proporcionar a melhor experiência possível no nosso site. Ao continuar a usar este site, você concorda com o uso de cookies.
Ok
Privacy Policy