servidor serve que node node.js restify

serve - node.js servidor web



Servir archivos estáticos con RESTIFY (7)

Estoy aprendiendo a usar Node.js. Actualmente, tengo una estructura de carpetas que se parece a la siguiente:

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 es mi código de servidor web. node server.js esto desde una línea de comandos usando node server.js . Los contenidos de ese archivo son:

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); });

Como puede ver, este servidor se basa en RESTIFICAR. Me han dicho que debo usar RESTIFICAR. Sin embargo, no puedo averiguar cómo servir archivos estáticos. Por ejemplo, ¿cómo servidor los archivos * .html, * .css, * .png y * .js en mi aplicación?

¡Gracias!


Así es como estoy sirviendo archivos estáticos en Restify

server.get(///public//docs//?.*/, restify.plugins.serveStatic({ directory: __dirname, default: ''index.html'' }));

la ruta de acceso público será: example.com/public/docs/index.html


De la documentation :

server.get(///docs//public//?.*/, restify.serveStatic({ directory: ''./public'' }));

Pero esto buscará los archivos en el directorio ./public/docs/public/ .
Prefiero usar la clave __dirname aquí:

server.get(///public//?.*/, restify.serveStatic({ directory: __dirname }));

El valor de __dirname es igual a la ruta del directorio del archivo de script, que se supone que también es una carpeta, donde es public directorio public .

Y ahora /public/.* todos los URL ./public/ directorio ./public/ .


Desde Restify 7, las rutas ya no toman expresiones regulares completas , por lo que si quiere que /public/stylesheet.css sirva el archivo ./public/stylesheet.css , su código ahora se verá así:

server.get(''/public/*'', restify.plugins.serveStatic({ directory: __dirname, }))

Esto se debe a que Restify 7 tiene un nuevo back-end de enrutamiento (potencialmente más rápido): find-my-way


Me encontré con este problema recientemente, así que si bien esto puede no ayudarlo, podría ayudar a otras personas que tienen problemas con él.

Cuando declara Restify como const restify = require(''restify''); , el método serveStatic estará en el objeto de los complementos, por lo que el uso de restify.serveStatic fallará silenciosamente. La forma correcta de acceder al método es restify.plugins.serveStatic .

Puede encontrar los documentos de actualización aquí: http://restify.com/docs/plugins-api/#serve-static


Prueba esto: aquí la vista es un nombre de directorio de recursos estáticos

server.get(''///.*/'', restify.plugins.serveStatic({ directory: __dirname + "/view/", default: ''./home.html'' }) );


Según mi versión actual de restify (v5.2.0)

El serveStatic se ha movido a los plugins , por lo que el código sería así

server.get( ///(.*)?.*/, restify.plugins.serveStatic({ directory: ''./static'', }) )

La sintaxis anterior servirá sus archivos estáticos en la carpeta static . Para que pueda obtener el archivo estático como http://yoursite.com/awesome-photo.jpg

Por alguna razón, si desea servir los archivos estáticos en una ruta específica como esta http://yoursite.com/assets/awesome-photo.jpg por ejemplo.

El código debe ser refactorizado en este

server.get( ///assets//(.*)?.*/, restify.plugins.serveStatic({ directory: `${app_root}/static`, appendRequestPath: false }) )

La opción appendRequestPath: false anterior significa que no incluimos la ruta de los assets en el nombre del archivo


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(); }); });