2013-10-09 19 views
26

Ich lerne, Node.js zu verwenden. Derzeit habe ich eine Ordnerstruktur, die wie folgt aussieht:Serving statische Dateien mit RESTIFY

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 ist mein Webserver-Code. Ich führe dies von einer Kommandozeile mit node server.js. Der Inhalt dieser Datei lautet wie folgt:

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

Wie Sie sehen können, stützt sich dieser Server auf RESTIFY. Mir wurde gesagt, ich muss RESTIFY verwenden. Ich kann jedoch nicht herausfinden, wie statische Dateien bereitgestellt werden. Wie kann ich beispielsweise die * .html-, * .css-, * .png- und * .js-Dateien in meiner App verwalten?

Vielen Dank!

+0

Mögliche Duplikate: http://stackoverflow.com/questions/15463841/serving-static-files-with-restify-node-js? Rq = 1 – vinaut

Antwort

38

Vom documentation:

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

Aber diese werden die Dateien in dem Verzeichnis ./public/docs/public/ suchen.
Ich ziehe hier __dirname Schlüssel zu verwenden:

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

Und wir jetzt alle /public/.* Urls ./public/ Verzeichnis zuordnen.

+0

Welchen Wert hätte '__dirname' in Ihrem Fall? – letmaik

+1

[__dirname] (https://nodejs.org/docs/latest/api/globals.html#globals_dirname) –

0

Ich bin erst vor kurzem auf dieses Problem gestoßen, also könnte dies nicht helfen, aber es könnte anderen helfen, die Probleme damit haben.

Wenn Sie "Restify" als const restify = require('restify'); deklarieren, befindet sich die serveStatic-Methode im Plugins-Objekt, sodass die Verwendung von restify.serveStatic in Kürze fehlschlägt. Der korrekte Zugriff auf die Methode ist restify.plugins.serveStatic.

Sie können die Update-Dokumentation finden Sie hier: http://restify.com/docs/plugins-api/#serve-static

4

Nach meiner aktuellen restify Version (V5.2.0)

die serveStatic in plugins bewegt wurde, so dass der Code wie folgt

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

Syntax oben dient Ihre statische Dateien auf Ordner static. So können Sie die statische Datei wie http://yoursite.com/awesome-photo.jpg

aus irgendeinem Grund erhalten, wenn Sie die statischen Dateien unter bestimmten Pfad wie http://yoursite.com/assets/awesome-photo.jpg zum Beispiel liefern wollen.

Die Option in diesem

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

Refactoring appendRequestPath: false oben bedeutet der Code sollten wir assets Pfad in den Dateinamen

0
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

Try this gehören nicht: Hier Ansicht ist eine statische Ressource Verzeichnisnamen

server.get('/\/.*/', restify.plugins.serveStatic({ 

    directory: __dirname + "/view/", 
    default: './home.html' 

    }) 
); 
Verwandte Themen