web-dev-qa-db-fra.com

Servir des fichiers statiques avec RESTIFY

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!

30
Node Newbie

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.

43
vp_arth

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

8

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

4
leo

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

2
Zohaib

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

1
Mike Fleming

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' 

   })
);
0
Om Sharma
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();
    });
});
0
techyaura