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