Arquivos Estáticos no Express com Node.js
Vamos abordar como enviar arquivos HTML estáticos para o usuário utilizando Node.js + Express. Para trabalhar com arquivos estáticos no Express, há um componente especial chamado express.static(), que aponta para o diretório contendo esses arquivos.
Suponha que nosso projeto tenha a seguinte estrutura:
app.js: principal arquivo da aplicaçãonode_modulespackage.jsonpublic: pasta onde será definido um arquivoabout.html
Na pasta public, haverá o arquivo about.html com o seguinte conteúdo:
<!DOCTYPE html>
<html>
<head>
<title>Sobre o site</title>
<meta charset="utf-8" />
</head>
<body>
<h1>Sobre o site</h1>
</body>
</html>Agora, vamos definir o seguinte código no arquivo app.js:
const express = require("express");
const app = express();
app.use(express.static("public"));
app.use("/", function (_, response) {
response.send("Página Principal");
});
app.listen(3000, () => console.log("Servidor iniciado em http://localhost:3000"));Página Principal
Para integrar o componente express.static no processo de tratamento de requisições, utilizamos a função app.use(). Esta função permite adicionar diversos componentes, também conhecidos como middleware, ao pipeline de tratamento de requisições:
app.use(express.static("public"));Este chamado deve ser colocado antes de todos os outros chamados da função app.get().
Na função express.static(), passamos o caminho para a pasta com os arquivos estáticos. Neste caso, indicamos um caminho relativo: para a pasta public dentro da pasta atual do projeto. Se necessário, também é possível definir um caminho absoluto:
app.use(express.static(__dirname + "/public"));Aqui, a expressão especial __dirname permite obter o caminho completo da pasta, ao qual é adicionado o caminho /public.
Vamos executar a aplicação e acessar no navegador o caminho http://localhost:3000/about.html:

É importante notar que, ao acessar o arquivo, indicamos apenas o nome do arquivo sem o nome da pasta public. Também não devemos confundir este acesso com a ação da função sendFile; neste caso, acessamos diretamente os arquivos estáticos, enquanto a função sendFile pega o conteúdo do arquivo e o envia ao usuário.
Além disso, podemos alterar o caminho para o diretório de arquivos estáticos:
const express = require("express");
const app = express();
app.use("/static", express.static("public"));
app.use("/", function (_, response) {
response.send("<h1>Página Principal</h1>");
});
app.listen(3000, () => console.log("Servidor iniciado em http://localhost:3000"));Agora, para acessar o arquivo about.html, é necessário enviar a requisição para http://localhost:3000/static/about.html.
Em conclusão, podemos definir diversos caminhos para diferentes tipos de arquivos estáticos. Por exemplo, arquivos HTML em uma pasta, estilos em outra e scripts JavaScript em uma terceira:
app.use(express.static("html"));
app.use(express.static("styles"));
app.use(express.static("scripts"));