Je suis donc nouveau sur le nœud et j'essaie d'apprendre à utiliser la bibliothèque express
avec. Cependant, le problème que j'essaie de comprendre est la raison pour laquelle les fichiers de mon dossier /public
Ne semblent pas être servis en tant que contenu statique.
Voici mon code:
var http = require('http');
var port = process.env.port || 1337;
var express = require('express');
var handlebars = require('express3-handlebars');
var path = require('path');
var application = express();
application.use(express.static(path.join(__dirname, 'public')));
application.engine('handlebars', handlebars({ defaultLayout: 'main' }));
application.get('/', function(req, res){
res.render('index.handlebars', { someProp: 3 });
});
application.listen(port);
Et ma structure de répertoire:
/
- server.js (the above referenced file)
/ Views
- index.handlebars
/ Layouts
- main.handlebars
/ public
- ServeMe.txt
Ma compréhension était que application.use(express.static(path.join(__dirname, 'public')));
était censé configurer le serveur pour répondre à toute demande dans le dossier public avec cette ressource si elle était trouvée. Qu'est-ce que je fais mal? Curieusement, il était plus facile de configurer le guidon comme moteur de visualisation que de faire fonctionner ce dossier public = D
EDIT: l'URL complète que j'essaie de demander: http://localhost:1337/public/serveme.txt
J'ai essayé la sensibilité à la casse (qui ne devrait pas être un problème), et cela n'a pas fonctionné non plus.
L'URL complète que j'essaie de demander:
http://localhost:1337/public/serveme.txt
C'est ton problème. Tout ce qui se trouve dans le répertoire que vous désignez comme contenu statique est disponible directement à partir de l'URL de base. Vous devez demander http://localhost:1337/serveme.txt
au lieu.
Si vous souhaitez uniquement diffuser des fichiers statiques de /public
vous pouvez passer une chaîne comme premier argument:
application.use("/public", express.static(path.join(__dirname, 'public')));
Depuis référence API Express
app.use(express.static(__dirname + '/public'));
Cette ligne sert votre dossier public à l'URL racine de votre application, ce qui signifie que les demandes suivantes sont valides et ne donnent pas d'erreur 404.
// GET /javascripts/jquery.js // GET /style.css // GET /favicon.ico
app.use prend également un premier argument facultatif qui vous permet de spécifier l'URL de demande à laquelle vous souhaitez diffuser le contenu. Par défaut, ce premier argument est "/", ce qui signifie que votre contenu statique sera diffusé à l'URL de base. Si vous souhaitez que votre contenu statique ne soit pas diffusé au niveau racine, comme le fait actuellement votre code, consultez l'exemple suivant (à nouveau tiré des documents)
app.use('/static', express.static(__dirname + '/public'));
Cette ligne sert à nouveau votre dossier public, mais à l'URL statique/de votre application, ce qui rend les demandes suivantes valides sans erreur 404.
(Exemple d'URL: http://localhost:1337/static/anythingInYourPublicFolder
)
// GET /static/javascripts/jquery.js // GET /static/style.css // GET /static/favicon.ico
Quelles URL essayez-vous de charger? Vous devez pas inclure "public" dans vos URL, donc curl -v 'http://localhost:1337/ServeMe.txt'
.