Eu tenho um aplicativo node.js básico que estou tentando decolar usando o Express framework. Eu tenho uma views
pasta onde eu tenho um index.html
arquivo. Mas recebo o seguinte erro ao carregar o navegador da web.
Erro: Não foi possível encontrar o módulo 'html'
Abaixo está o meu código.
var express = require('express');
var app = express.createServer();
app.use(express.staticProvider(__dirname + '/public'));
app.get('/', function(req, res) {
res.render('index.html');
});
app.listen(8080, '127.0.0.1')
O que estou perdendo aqui?
Muitas dessas respostas estão desatualizadas.
Usando express 3.0.0 e 3.1.0, o seguinte funciona:
Consulte os comentários abaixo para obter sintaxe e advertências alternativas para o express 3.4+:
Então você pode fazer algo como:
Isso pressupõe que você tenha suas visualizações na
views
subpasta e que instalou oejs
módulo do nó. Caso contrário, execute o seguinte em um console do Node:fonte
No guia Express.js: exibir renderização
Então, você cria seu próprio renderizador simples ou usa o jade:
Mais sobre
app.register
.fonte
app.engine('.html', require('ejs').renderFile);
Você também pode ler o arquivo HTML e enviá-lo:
fonte
tente isso. funciona para mim.
fonte
app.register
. Talvez tenha sido preterido no express 3.0.0.rc3?TypeError: Object function app(req, res){ app.handle(req, res); } has no method 'register'
fonte
Se você estiver usando express@~3.0.0, altere a linha abaixo do seu exemplo:
para algo como isto:
Eu fiz isso como descrito na página da API expressa e funciona como um encanto. Com essa configuração, você não precisa escrever código adicional, para que seja fácil o suficiente para sua micro produção ou teste.
Código completo listado abaixo:
fonte
app.use(express.static(__dirname + '/public'));
depois de iniciar o servidorapp.listen
?Eu também enfrentei o mesmo problema em
express 3.X
enode 0.6.16
. A solução fornecida acima não funcionará na versão mais recenteexpress 3.x
. Eles removeram oapp.register
método e adicionaram oapp.engine
método. Se você tentou a solução acima, pode acabar com o seguinte erro.Para se livrar da mensagem de erro. Adicione a seguinte linha ao seu
app.configure function
Nota: você precisa instalar o
ejs
mecanismo de modeloExemplo:
Nota: A solução mais simples é usar o modelo ejs como mecanismo de exibição. Lá você pode escrever HTML bruto em arquivos de visualização * .ejs.
fonte
ejs
globalmente?estrutura de pastas:
server.js
index.html
resultado:
Olá Mundo
fonte
Se você não precisar usar o diretório views , basta mover os arquivos html para o público diretório abaixo.
e adicione esta linha ao app.configure em vez de '/ views'.
fonte
Para renderizar a página HTML no nó, tente o seguinte:
Você precisa instalar o
ejs
módulonpm
como:fonte
Para o meu projeto eu criei esta estrutura:
Esse código serve index.html para
/
solicitações e reset.css para/css/reset.css
solicitações. Simples o suficiente, e a melhor parte é que ele adiciona automaticamente cabeçalhos de cache .fonte
1) A melhor maneira é definir a pasta estática. No seu arquivo principal (app.js | server.js | ???):
public / css / form.html
public / css / style.css
Então você tem um arquivo estático da pasta "public":
2)
Você pode criar seu cache de arquivos.
Use o método fs.readFileSync
fonte
Com o Express 4.0.0, a única coisa que você precisa fazer é comentar duas linhas no app.js:
E, em seguida, solte seu arquivo estático no diretório / public. Exemplo: /public/index.html
fonte
Eu adicionei abaixo de 2 linhas e funcionou para mim
fonte
npm install ejs --save
no seu diretório de trabalho.Tente a função res.sendFile () em rotas expressas.
Leia aqui: http://codeforgeek.com/2015/01/render-html-file-expressjs/
fonte
Eu não queria depender do ejs para simplesmente entregar um arquivo HTML, então eu mesmo escrevi o pequeno renderizador:
fonte
Eu estava tentando configurar um aplicativo angular com uma API RESTful expressa e cheguei nesta página várias vezes, embora não fosse útil. Aqui está o que eu achei que funcionou:
Em seguida, no retorno de chamada para suas rotas da API, é semelhante a:
res.jsonp(users);
Sua estrutura do lado do cliente pode lidar com roteamento. Express é para servir a API.
Minha rota inicial é assim:
fonte
fonte
Aqui está uma demonstração completa do servidor expresso!
https://gist.github.com/xgqfrms-GitHub/7697d5975bdffe8d474ac19ef906e906
espero que ajude para você!
fonte
Adicione as seguintes linhas ao seu código
Substitua "jade" por "ejs" e "XYZ" (versão) por "*" no arquivo package.json
Em seguida, no arquivo app.js, adicione o seguinte código:
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');
E lembre-se de manter todos os arquivos .HTML em visualizações
Felicidades :)
fonte
Para html simples, você não precisa de nenhum pacote ou middleware npm
basta usar isso:
fonte
É muito triste que seja por volta de 2020, o express ainda não adicionou uma maneira de renderizar uma página HTML sem usar o
sendFile
método doresponse
objeto. UsarsendFile
não é um problema, mas passar um argumento para ele na forma depath.join(__dirname, 'relative/path/to/file')
não parece certo. Por que um usuário deve ingressar__dirname
no caminho do arquivo? Isso deve ser feito por padrão. Por que a raiz do servidor não pode ser desativada pelo diretório do projeto? Além disso, a instalação de uma dependência de modelo apenas para renderizar um arquivo HTML estático também não está correta. Não sei a maneira correta de resolver o problema, mas se eu tivesse que fornecer um HTML estático, faria algo como:O exemplo acima pressupõe que a estrutura do projeto tenha um
views
diretório e os arquivos HTML estáticos estejam dentro dele. Por exemplo, digamos, oviews
diretório tem dois arquivos HTML nomeadosindex.html
eabout.html
, para acessá-los, podemos visitar:localhost:8153/index.html
ou apenaslocalhost:8153/
para carregar aindex.html
página elocalhost:8153/about.html
carregar o arquivoabout.html
. Podemos usar uma abordagem semelhante para servir um aplicativo react / angular armazenando os artefatos noviews
diretório ou apenas usando odist/<project-name>
diretório padrão e configurando-o no servidor js da seguinte maneira:fonte
Eu queria permitir que solicitações "/" fossem tratadas por uma rota Express, onde anteriormente elas eram tratadas pelo middleware estático. Isso me permitiria renderizar a versão regular de index.html ou uma versão que carregasse JS e CSS concatenados + minificados, dependendo das configurações do aplicativo. Inspirado na resposta de Andrew Homeyer , decidi arrastar meus arquivos HTML - não modificados - para uma pasta de visualizações, configurar o Express assim
E criou um manipulador de rota assim
Isso funcionou muito bem.
fonte
No server.js, inclua
fonte
Se você está tentando veicular um arquivo HTML que JÁ possui todo o seu conteúdo, ele não precisa ser 'renderizado', só precisa ser 'veiculado'. A renderização ocorre quando o servidor atualiza ou injeta conteúdo antes que a página seja enviada ao navegador e requer dependências adicionais, como ejs, como mostram as outras respostas.
Se você simplesmente deseja direcionar o navegador para um arquivo com base em sua solicitação, use res.sendFile () como este:
Dessa forma, você não precisa de dependências adicionais além do express. Se você deseja apenas que o servidor envie seus arquivos html já criados, a descrição acima é uma maneira muito leve de fazer isso.
fonte
Coloque seu arquivo index.html na pasta pública
Agora execute o seguinte código no seu terminal
fonte
Eu costumo usar isso
Apenas tome cuidado, pois isso compartilhará qualquer coisa no diretório / web.
Espero que ajude
fonte
se você estiver usando o framework expresso para node.js
instalar npm ejs
adicione o arquivo de configuração
;
renderize a página do módulo de exportações form.js com o arquivo html no diretório views com a extensão do nome do arquivo ejs como
form.html.ejs
então crie o form.js
res.render('form.html.ejs');
fonte