2013-03-17 17 views
22

Ich habe den folgenden Code:statische Dateien mit restify (node.js) dient

app.js

[...] 

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

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

Und ich habe die folgende Dateistruktur

app.js 
public/ 
    index.html 

Also versuche ich, Durchsuchen:

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

und ich bekomme

{ 
    code: "ResourceNotFound", 
    message: "/docs/public/index.html" 
} 

Ich versuchte mit mehreren Variationen, aber keiner von ihnen schien zu funktionieren.

Ich bin sicher, dass es etwas ziemlich offensichtlich sein sollte, fehlt mir

Antwort

19

restify die directory Option als Präfix für die gesamte Route Weg verwenden. In Ihrem Fall wird nach ./public/docs/public/index.html gesucht.

+27

Ich bin Das Finden von Restify ist schrecklich dokumentiert. –

8
  1. Die Option directory ist ein Präfix für Ihren gesamten Pfad.
  2. Relative Pfade korrekt in späteren Versionen von Restify nicht (I 2.6.0-3, 2.8.2-3 getestet - und sie alle produzieren die NotAuthorized Fehler) Arbeits

Die Lösung wird jetzt:

Und dann müssen Ihre statischen Dateien in ./docs/public sein.
(__dirname ist eine globale Variable, die den absoluten Pfad des Skripts enthält, die Sie ausgeführt werden)

+0

Das hat es für mich getan !! Die '__dirname' Option ist der Schlüssel! –

+0

Es scheint einen Fehler für OSX zu geben, der die Verwendung von ./ Syntax verhindert, so dass dies die einzige Sache war, die für mich funktionierte. Vielen Dank! –

4

Basierend auf @ NdeeJim Antwort auf jemand fragen, wie alle statischen Ressourcen dienen:

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

rette mich viele Male, danke –

Verwandte Themen