2013-10-09 24 views
26

Sto imparando a utilizzare Node.js. Attualmente, ho una struttura di cartelle che sia simile alla seguente:Elaborazione di file statici con RESTIFICA

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 è il mio codice webserver. Eseguo questo da una riga di comando utilizzando node server.js. Il contenuto di questo file sono:

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

Come si può vedere, questo server si basa su RESTIFY. Mi è stato detto che devo usare RESTIFY. Tuttavia, non riesco a capire come servire i file statici. Ad esempio, come faccio a server i file * .html, * .css, * .png e * .js nella mia app?

Grazie!

+0

Possibile duplicato: http://stackoverflow.com/questions/15463841/serving-static-files-with-restify-node-js? Rq = 1 – vinaut

risposta

38

Dal documentation:

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

Ma questo cercherà i file nella directory ./public/docs/public/.
Io preferisco usare __dirname chiave qui:

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

E ora abbiamo map tutti /public/.* URL per ./public/ directory.

+0

Quale valore avrebbe '__dirname' nel tuo caso? – letmaik

+1

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

0

Mi sono imbattuto in questo problema solo di recente, quindi mentre questo potrebbe non essere d'aiuto potrebbe aiutare gli altri che hanno problemi con esso.

Quando si dichiara Restify come const restify = require('restify');, il metodo serveStatic si troverà nell'oggetto plugin in modo che l'utilizzo di restify.serveStatic non venga eseguito correttamente. Il metodo corretto per accedere al metodo è restify.plugins.serveStatic.

È possibile trovare la documentazione aggiornamento qui: http://restify.com/docs/plugins-api/#serve-static

4

Secondo la mia attuale versione restify (V5.2.0)

il serveStatic è stata spostata in plugins, in modo che il codice sarebbe come questo

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

La sintassi sopra servirà i file statici sulla cartella static. Quindi è possibile ottenere il file statico come http://yoursite.com/awesome-photo.jpg

Per qualche motivo se si desidera servire i file statici sotto percorso specifico come questo http://yoursite.com/assets/awesome-photo.jpg per esempio.

Il codice deve essere riscritta in questo

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

L'opzione appendRequestPath: false sopra significa che noi non includere assets percorso nel nome del file

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

Prova questo: Ecco vista è un nome di directory risorsa statica

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

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

    }) 
);