J'apprends à utiliser Node.js. Actuellement, j'ai une structure de dossiers qui ressemble à ceci:
index.html
server.js
client
index.html
subs
index.html
page.html
res
css
style.css
img
profile.png
js
page.js
jquery.min.js
server.js est mon code de serveur Web. Je l'exécute à partir d'une ligne de commande en utilisant node server.js
. Le contenu de ce fichier est:
var restify = require('restify');
var server = restify.createServer({
name: 'Test App',
version: '1.0.0'
});
server.use(restify.acceptParser(server.acceptable));
server.use(restify.queryParser());
server.use(restify.bodyParser());
server.get('/echo/:name', function (req, res, next) {
res.send(req.params);
return next();
});
server.listen(2000, function () {
console.log('%s running on %s', server.name, server.url);
});
Comme vous pouvez le voir, ce serveur s'appuie sur RESTIFY. On m'a dit que je devais utiliser RESTIFY. Cependant, je ne peux pas comprendre comment servir des fichiers statiques. Par exemple, comment puis-je gérer les fichiers * .html, * .css, * .png et * .js dans mon application?
Je vous remercie!
De la documentation :
server.get(/\/docs\/public\/?.*/, restify.serveStatic({
directory: './public'
}));
Mais cela va rechercher des fichiers dans le ./public/docs/public/
répertoire.
Je préfère utiliser la clé __ dirname ici:
server.get(/\/public\/?.*/, restify.serveStatic({
directory: __dirname
}));
La valeur de __dirname
est égal au chemin du répertoire du fichier de script, qui supposait être également un dossier, où est le répertoire public
.
Et maintenant, nous cartographions tout /public/.*
URL vers ./public/
répertoire.
Selon ma version restify actuelle (v5.2.0)
serveStatic
a été déplacé dans plugins
, donc le code serait comme ceci
server.get(
/\/(.*)?.*/,
restify.plugins.serveStatic({
directory: './static',
})
)
La syntaxe ci-dessus servira vos fichiers statiques dans le dossier static
. Vous pouvez donc obtenir le fichier statique comme http://yoursite.com/awesome-photo.jpg
Pour une raison quelconque, si vous souhaitez servir les fichiers statiques sous un chemin spécifique comme celui-ci http://yoursite.com/assets/awesome-photo.jpg
par exemple.
Le code doit être refactorisé dans ce
server.get(
/\/assets\/(.*)?.*/,
restify.plugins.serveStatic({
directory: `${app_root}/static`,
appendRequestPath: false
})
)
L'option appendRequestPath: false
ci-dessus signifie que nous n'incluons pas le chemin assets
dans le nom du fichier
Depuis Restify 7, les routes ne prennent plus de regexes complètes , donc si vous voulez /public/stylesheet.css
pour diffuser le fichier ./public/stylesheet.css
, votre code ressemblerait maintenant à ceci:
server.get('/public/*', restify.plugins.serveStatic({
directory: __dirname,
}))
C'est parce que Restify 7 a un nouveau back-end de routage (potentiellement plus rapide): find-my-way
voici comment je sers des fichiers statiques dans restify
server.get(/\/public\/docs\/?.*/, restify.plugins.serveStatic({
directory: __dirname,
default: 'index.html'
}));
le chemin d'accès public sera: example.com/public/docs/index.html
Je suis tombé sur ce problème tout récemment, alors même si cela ne peut pas vous aider, cela pourrait aider d'autres personnes qui ont des problèmes avec cela.
Lorsque vous déclarez Restify en tant que const restify = require('restify');
, la méthode serveStatic sera dans l'objet plugins, donc en utilisant restify.serveStatic
échouera tranquillement. La façon correcte d'accéder à la méthode est restify.plugins.serveStatic
.
Vous pouvez trouver les documents de mise à jour ici: http://restify.com/docs/plugins-api/#serve-static
Essayez ceci: Voici la vue est un nom de répertoire de ressources statique
server.get('/\/.*/', restify.plugins.serveStatic({
directory: __dirname + "/view/",
default: './home.html'
})
);
server.get('/', function(req, res, next) {
fs.readFile(__dirname + '/index.html', function (err, data) {
if (err) {
next(err);
return;
}
res.setHeader('Content-Type', 'text/html');
res.writeHead(200);
res.end(data);
next();
});
});