J'ai une application node.js de base que j'essaie de décoller en utilisant le framework Express. J'ai un views
dossier où j'ai un index.html
fichier. Mais je reçois l'erreur suivante lors du chargement du navigateur Web.
Erreur: impossible de trouver le module 'html'
Voici mon code.
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')
Qu'est-ce que j'oublie ici?
Beaucoup de ces réponses sont obsolètes.
En utilisant express 3.0.0 et 3.1.0, les travaux suivants:
Voir les commentaires ci-dessous pour une syntaxe alternative et des mises en garde pour express 3.4+:
Ensuite, vous pouvez faire quelque chose comme:
Cela suppose que vous avez vos vues dans le
views
sous - dossier et que vous avez installé leejs
module de noeud. Sinon, exécutez ce qui suit sur une console Node:la source
Depuis le Guide Express.js: Afficher le rendu
Donc, soit vous créez votre propre rendu simple, soit vous utilisez simplement du jade:
Plus au sujet
app.register
.la source
app.engine('.html', require('ejs').renderFile);
Vous pouvez également lire le fichier HTML et l'envoyer:
la source
essaye ça. ça marche pour moi.
la source
app.register
. Peut-être qu'il est obsolète dans express 3.0.0.rc3?TypeError: Object function app(req, res){ app.handle(req, res); } has no method 'register'
la source
Si vous utilisez express@~3.0.0, changez la ligne ci-dessous à partir de votre exemple:
à quelque chose comme ça:
Je l'ai fait comme décrit sur la page api express et cela fonctionne comme un charme. Avec cette configuration, vous n'avez pas à écrire de code supplémentaire, il devient donc assez facile à utiliser pour votre microproduction ou vos tests.
Code complet ci-dessous:
la source
app.use(express.static(__dirname + '/public'));
après avoir démarré le serveur avecapp.listen
?J'ai également rencontré le même problème dans
express 3.X
etnode 0.6.16
. La solution donnée ci-dessus ne fonctionnera pas pour la dernière versionexpress 3.x
. Ils ont supprimé laapp.register
méthode et ajouté laapp.engine
méthode. Si vous avez essayé la solution ci-dessus, vous pouvez vous retrouver avec l'erreur suivante.Pour se débarrasser du message d'erreur. Ajoutez la ligne suivante à votre
app.configure function
Remarque: vous devez installer le
ejs
moteur de modèleExemple:
Remarque: La solution la plus simple consiste à utiliser le modèle ejs comme moteur de vue. Là, vous pouvez écrire du HTML brut dans les fichiers de vue * .ejs.
la source
ejs
globalement?structure des dossiers:
server.js
index.html
production:
Bonjour le monde
la source
Si vous n'avez pas besoin d'utiliser le répertoire des vues , déplacez simplement les fichiers html vers le répertoire public ci-dessous.
puis ajoutez cette ligne dans app.configure au lieu de '/ views'.
la source
Pour afficher la page Html dans le nœud, essayez ce qui suit,
Vous devez installer le
ejs
modulenpm
comme:la source
Pour mon projet, j'ai créé cette structure:
Ce code sert index.html pour les
/
demandes et reset.css pour les/css/reset.css
demandes. Assez simple, et la meilleure partie est qu'il ajoute automatiquement des en-têtes de cache .la source
1) La meilleure façon est de définir un dossier statique. Dans votre fichier principal (app.js | server.js | ???):
public / css / form.html
public / css / style.css
Ensuite, vous avez obtenu un fichier statique du dossier "public":
2)
Vous pouvez créer votre cache de fichiers.
Utilisez la méthode fs.readFileSync
la source
Avec Express 4.0.0, la seule chose que vous avez à faire est de commenter 2 lignes dans app.js:
Et puis déposez votre fichier statique dans le répertoire / public. Exemple: /public/index.html
la source
J'ai ajouté en dessous de 2 lignes et ça marche pour moi
la source
npm install ejs --save
dans votre répertoire de travail.Essayez la fonction res.sendFile () dans les itinéraires Express.
Lisez ici: http://codeforgeek.com/2015/01/render-html-file-expressjs/
la source
Je ne voulais pas dépendre d'ejs pour livrer simplement un fichier HTML, j'ai donc simplement écrit le petit rendu moi-même:
la source
J'essayais de configurer une application angulaire avec une API RESTful express et j'ai atterri sur cette page plusieurs fois, mais cela n'a pas été utile. Voici ce que j'ai trouvé qui a fonctionné:
Ensuite, dans le rappel de vos itinéraires API, ressemble à:
res.jsonp(users);
Votre infrastructure côté client peut gérer le routage. Express sert à servir l'API.
Mon itinéraire d'origine ressemble à ceci:
la source
la source
Voici une démo complète du serveur express!
https://gist.github.com/xgqfrms-GitHub/7697d5975bdffe8d474ac19ef906e906
j'espère que cela vous aidera!
la source
Ajoutez les lignes suivantes à votre code
Remplacez "jade" par "ejs" & "XYZ" (version) par "*" dans le fichier package.json
Ensuite, dans votre fichier app.js, ajoutez le code suivant:
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');
Et n'oubliez pas de conserver tous les fichiers .HTML dans le dossier des vues
À votre santé :)
la source
Pour du HTML simple, vous n'avez besoin d'aucun paquetage npm ou middleware
utilisez simplement ceci:
la source
Il est très triste qu'il soit environ 2020, encore express n'a pas ajouté un moyen de rendre une page HTML sans utiliser la
sendFile
méthode de l'response
objet. L'utilisationsendFile
n'est pas un problème, mais lui transmettre un argument sous la forme depath.join(__dirname, 'relative/path/to/file')
ne se sent pas bien. Pourquoi un utilisateur devrait-il rejoindre__dirname
le chemin du fichier? Cela devrait être fait par défaut. Pourquoi la racine du serveur ne peut-elle pas être par défaut le répertoire du projet? De plus, l'installation d'une dépendance de modèle juste pour rendre un fichier HTML statique n'est pas correcte. Je ne connais pas la bonne façon de résoudre le problème, mais si je devais servir un HTML statique, je ferais quelque chose comme:L'exemple ci-dessus suppose que la structure du projet possède un
views
répertoire et que les fichiers HTML statiques s'y trouvent. Par exemple, disons, leviews
répertoire a deux fichiers HTML nommésindex.html
etabout.html
, pour y accéder, nous pouvons visiter:localhost:8153/index.html
ou simplementlocalhost:8153/
pour charger laindex.html
page etlocalhost:8153/about.html
pour charger leabout.html
. Nous pouvons utiliser une approche similaire pour servir une application react / angular en stockant les artefacts dans leviews
répertoire ou simplement en utilisant ledist/<project-name>
répertoire par défaut et en le configurant dans le serveur js comme suit:la source
Je voulais permettre que les requêtes "/" soient gérées par une route Express alors qu'auparavant elles étaient gérées par le middleware statique. Cela me permettrait de rendre la version régulière de index.html ou une version qui chargeait JS et CSS concaténés + minifiés, selon les paramètres de l'application. Inspiré par la réponse d'Andrew Homeyer , j'ai décidé de faire glisser mes fichiers HTML - non modifiés - dans un dossier de vues, de configurer Express comme ça
Et créé un gestionnaire d'itinéraire comme ça
Cela a plutôt bien fonctionné.
la source
Dans server.js, veuillez inclure
la source
Si vous essayez de servir un fichier HTML qui contient DÉJÀ tout son contenu, il n'a pas besoin d'être «rendu», il doit simplement être «servi». Le rendu est lorsque vous avez la mise à jour du serveur ou injectez du contenu avant que la page ne soit envoyée au navigateur, et cela nécessite des dépendances supplémentaires comme ejs, comme les autres réponses le montrent.
Si vous souhaitez simplement diriger le navigateur vers un fichier en fonction de leur demande, vous devez utiliser res.sendFile () comme ceci:
De cette façon, vous n'avez pas besoin de dépendances supplémentaires en plus d'exprimer. Si vous voulez simplement que le serveur envoie vos fichiers html déjà créés, ce qui précède est un moyen très léger de le faire.
la source
Mettez votre fichier index.html dans un dossier public
Maintenant, exécutez le code suivant dans votre terminal
la source
Express 4.x
Envoyer des fichiers .html, pas de moteur de modèle ...
la source
J'utilise habituellement ceci
Faites juste attention car cela partagera n'importe quoi dans le répertoire / web.
J'espère que ça aide
la source
si vous utilisez un framework express pour node.js
installer npm ejs
puis ajoutez le fichier de configuration
;
afficher la page du module d'export form.js ont le fichier html dans le répertoire des vues avec l'extension du nom de fichier ejs comme
form.html.ejs
puis créez le form.js
res.render('form.html.ejs');
la source