2013-12-16 2 views
5

Wenn ich nur diesen Weg mit meiner allen anderen Routen zu verwenden, dass statische Dateien gut bedient:Node.js/Expess.js. Statische Router nicht, wenn mit Wildcard-Router verwendet erkannt

var public_dir = path.join(__dirname, 'public'); 
app.use('/public', express.static(public_dir)); 

Aber wenn ich unter diesen Zeilen hinzufügen - alle Anfragen sind Fang mit diesem Router (nicht die vorherige):

app.get('/*', function(req, res){ 
    res.redirect('/#!' + req.path); 
}); 

Es ist seltsam für mich, weil /public Definition zuerst kommt. Aber alle Anfragen gehen zum zuletzt definierten /* Request Handler. Wenn ich versuche, Seite http://127.0.0.1:3000/public/website/application.js zu öffnen, werde ich zu http://127.0.0.1:3000/#!/public/website/application.js umgeleitet. Warum passiert es und wie kann man diese Situation am besten lösen?

Vielen Dank!


Lösung ist einfach. Ich habe keine Arbeitsanweisung in der Liste von Middlewares.

app.use(app.router); 

Dies ist ein Problem der URL-Routing erstellt. Aber es ist seltsam, dass node.js mir nicht über "inkorrektes Setup" von Middleware erzählt hat.

+1

Sie verwenden app.use mit dem ersten und app.get mit dem zweiten ..? – DrCord

+1

Da @DrCord erwähnt wird, werden App. [Get | post | put | etc] -Methoden zum Router hinzugefügt. Wenn Sie Ihren Router zuerst anhängen, wird er daher zuerst verwendet. –

+0

Wie Nick erwähnte Positionen von Router und statische Entscheidung Vorrang. Bitte zeigen Sie, wie Sie Router und statische (relative Positionen) verwenden. – user568109

Antwort

4

Es ist nichts falsch mit Ihrem Code, aber bedenken Sie, dass jede Anfrage auf etwas, das nicht existiert, von Ihrem bekommen ('/ *', ...).

Das heißt, Sie public_dir auf /public laden, die bedeuten, wenn public_dir als public/website/ definiert Sie http://127.0.0.1:3000/public/application.js tun, um eine Datei zuzugreifen, finden bei /public/website/application.js

+0

Ja, Sie sollten nicht öffentlich in Ihren Pfad für Dateien im Öffentlichen Ordner enthalten ... – DrCord

+0

Ich habe meinen Code unten aktualisiert. Ich habe '/ public' verwendet, um zu' public directory' zu navigieren, wo ich einige Unterverzeichnisse (einschließlich 'website') habe. Ich sehe meine statische Datei im Browser, wenn ich nur die 'app.get ('/ *', ...) 'Definition gelöscht habe. –

+0

Das ist seltsam, etwas anderes muss interagieren. Ich habe hier https://github.com/BaNzounet/so-express erstellt, was Sie beschrieben haben, und es funktioniert. – BaNz

Verwandte Themen