2016-03-28 24 views
0

Ich habe den folgenden Code ein, zum Beispiel in meinen Template-Dateien:Serving statische Dateien in Express ohne IP-Adresse

<link href="http://localhost:3000/css/bootstrap.min.css" rel="stylesheet">

Dies zwingt mich die IP-Adresse von http://localhost:3000 auf den Web-Server IP zu ändern Adresse, wenn ich die Website starte. Wie Sie sich vorstellen können, gibt es viele Template-Dateien für die gesamte Site. Ich habe Skripte geschrieben, die die IP-Instanzen in den Vorlagendateien des Projekts suchen und ersetzen können, und das möchte ich vermeiden, wenn ich kann.

Ich mag würde das folgende Format halten:

<link href="css/bootstrap.min.css" rel="stylesheet">

Hinweis es unabhängig von der Herkunft. Ich hoffe, es gab Middlewear, dass Express den aktuellen Standort des Servers verwenden konnte, um die Dateien zu bedienen.

Ich bin derzeit mit diesen Code in meiner server.js Datei:

app.use(express.static(path.join(__dirname ,'/v1/public/')));

Und funktioniert großartig, wenn ich den Host in den Template-Dateien angeben. Ich habe online keine Ressourcen gefunden, die das machen, was ich einfach machen möchte.

+0

Warum nicht nur absolute Pfade verwenden? – SLaks

+0

Ich denke, Sie möchten den Port anders einstellen? http://StackOverflow.com/a/17004592/3662110 – jmargolisvt

+0

@SLaks Wie in dem Beitrag erwähnt, müsste ich manuell oder schreiben ein Skript, um den absoluten Pfad zu ersetzen, wenn ich den Server autonom zu ersetzen. – Maverick

Antwort

1

Wenn der Header eine Vorlagendatei ist, warum übergeben Sie nicht die vollständige URL als Variable an die Vorlage? Sie können die URL auf App-Ebene durch so etwas wie dieses Konstrukt:

var baseUrl = req.protocol + '://' + req.get('host'); 

und baseUrl zu Ihrem Header-Template übergeben und die Wege zur Laufzeit voranstellen.

+0

Ich werde dies ausprobieren – Maverick

+0

Diese Lösung ist praktisch und außergewöhnlich effektiv. ** edit: ** Für zukünftige Entwickler: 'req.get ('host')' beinhaltet auch den Port und den Doppelpunkt in der zurückgegebenen url-Zeichenfolge. Es muss nicht angehängt werden. Verwenden Sie genau wie von Arbel vorgeschrieben. – Maverick

0

Versuchen:

href="http://localhost:3000/v1/public/css/bootstrap.min.css" rel="stylesheet" 

oder relativ:

href="./v1/public/css/bootstrap.min.css" rel="stylesheet" 

Ihre statischen Ordner ist der Ordner-Pfad, wo die statischen Ressourcen bedient werden.

Verwandte Themen