2016-07-25 19 views
5

Ich verwende Express, um statische Inhalte auf meiner Website zu liefern, und ich möchte FontAwesome (npm install font-awesome) integrieren. In CSS von Font-Awesome sind die Links zu den Font-Dateien jedoch mit einem Query-String versehen, der Versionsinformationen enthält, die express nicht verstehen.Express: Wie font-awesome als statischen Inhalt zu dienen?

Hat jemand dieses gefunden und eine Reparatur gefunden? Gibt es eine einfache Möglichkeit, die qs für statischen Inhalt ausdrücklich zu ignorieren?

var express = require('express') 
var app = express() 

app.use('/static', express.static('./node_modules/font-awesome/css')) 
app.use('/static', express.static('./node_modules/font-awesome/fonts')) 

// response 200 | /static/font-awesome.min.css 
// error 404 | /static/fontawesome--webfont.woff?v=4.6.3 

aktualisieren Wie @Denys Séguret weist unser es nicht die qs wie ich gedacht hatte. Die tatsächliche Anforderung ist für /fonts/fontawesome--webfont.woff?v=...

Lösung

app.use('/fonts', express.static('./node_modules/font-awesome/fonts')) 

Antwort

5

Wenn Ihr Browser /static/fontawesome--webfont.woff?v=4.6.3 anfordert, der Server frei ist, den ?v=xxx Teil zu ignorieren. Und das macht das Modul express.static. Der Zweck dieses Teils besteht darin, zu verhindern, dass Browser und Proxies eine alte Version der Datei verwenden.

Also das Problem ist nicht, wo Sie denken, dass es ist. Das Problem besteht darin, die statische route auf zwei Server zuzuordnen. Die erste findet die Datei nicht und gibt einen 404.

(Schmutzige) Lösung 1:

ändern Mapping

app.use('/static', express.static('./node_modules/font-awesome')) 

und ändern Sie die URLs:

/static/fonts/fontawesome--webfont.woff?v=4.6.3 

Ich sage, es ist schmutzig, weil Sie den ungeprüften Inhalt eines Node-Moduls bedienen (das aktualisiert wird, wenn Sie ein npm-Update durchführen). Das solltest du niemals tun.

Lösung 2:

Erstellen Sie eine statische Verzeichnis (der Name spielt keine Rolle) und dann Karte nur es

app.use('/static', express.static('./static')); 
+0

Dank Verwendung innerhalb der Inhalte der ./node_modules/font-awesome/css und ./node_modules/font-awesome/fonts Verzeichnisse setzen, ich sehe jetzt sucht es nach der Schriftart in '' '/fonts/fontawesome-webfont.ttf?v = ...' '' – MatUtter

+0

_ "Das solltest du nie tun." _ Ich stimme nicht zu. Wenn Sie sich in einen bestimmten Semver der Abhängigkeit einklinken, sehe ich kein Problem darin, sie als statischen Pfad zu verwenden, auch wenn 'node_modules' nicht markiert ist. –

+0

@PatrickRoberts Selbst wenn Sie denken, dass Sie es aufgrund der semver-Locking "sicher" tun können, ist es nicht sinnvoll, ein komplettes Node-Modul zu bedienen. Das Mindeste, was man sagen kann, ist, dass es extrem faul und schmutzig ist. –