2013-03-17 17 views
22

Mam następujący kod:obsługujących pliki statyczne z restify (node.js)

app.js

[...] 

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

server.listen(1337, function() { 
    console.log('%s listening at %s', server.name, server.url); 
}); 

I mieć następującą strukturę plików

app.js 
public/ 
    index.html 

Więc staram przeglądanie:

http://localhost:1337/docs/public/index.html 

i otrzymuję

Próbowałem z kilkoma odmianami, ale żaden z nich nie działał.

Jestem pewien, że powinno to być coś całkiem oczywiste jestem brakujące

Odpowiedz

19

restify użyje opcji directory jako przedrostek dla całą ścieżkę trasa. W twoim przypadku będzie szukać ./public/docs/public/index.html.

+27

jestem znalezienie restify jest strasznie udokumentowane. –

8
  1. Opcja directory jest prefiksem dla całej ścieżki.
  2. Ścieżki względne nie działają prawidłowo w nowszych wersjach Restify (testowałem 2.6.0-3, 2.8.2-3 - a wszystkie one produkować NotAuthorized błąd)

Rozwiązaniem staje się teraz:

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

A następnie statyczne pliki będą musiały być w ./docs/public.
(__dirname jest globalną zmienną, która zawiera bezwzględną ścieżkę skryptu są uruchomione)

+0

To zrobiło to dla mnie !! Opcja '__dirname' jest kluczem! –

+0

Wygląda na to, że istnieje błąd dla OSX, który uniemożliwia używanie ./składni, więc to była jedyna rzecz, która zadziałała dla mnie. Dzięki! –

4

oparciu o użytkownika @ NdeeJim odpowiedzi każdemu, zastanawiając się, jak służyć wszystkich statycznych zasobów:

server.get(/\/?.*/, restify.serveStatic({ 
      directory: __dirname, 
      default: 'index.html', 
      match: /^((?!app.js).)*$/ // we should deny access to the application source 
    })); 
+0

zaoszczędzić mi wiele razy, dzięki –

Powiązane problemy