Wie oben im Kommentar erwähnt, /:category/:subcategory/:keyword
Ihre ganz allgemeine Route getroffen wird, weil sie Inhalt übereinstimmen müssen URLs auf Ihrer Homepage. Diese Route wird passen jeden dreiteiligen Weg, ex:
/images/icons/smiley.png
/scripts/thirdparty/jquery.min.js
Etc!
Es gibt zwei Ansätze, um dies zu beheben. Man würde Ihre SearchController
URLs spezifischer machen. Vielleicht wäre /search/:category/:subcategory/:keyword
eine gute Idee? Dies ist das einfachste und sollte Konflikte mit Ihren Assets sofort beseitigen.
Aber wenn Sie wirklich catch alle müssen Routen, die mit anderen spezifischen Routen stören können, dann ist die Lösung zunächst die spezifischen Routen zu fangen. Zum Beispiel in routes.js
:
'GET /images/*': 'RouteController.showAsset',
'GET /scripts/*': 'RouteController.showAsset',
'GET /styles/*': 'RouteController.showAsset',
//...
'GET /:category/:subcategory/:keyword': 'SearchController.index',
Erstellen Sie dann einen Controller RouteController
mit der Methode:
showAsset: function(req, res) {
var pathToAsset = require('path').resolve('.tmp/public', req.path);
// ex should be '.tmp/public/images/icons/smiley.png'
return res.sendfile(pathToAsset);
},
Sie müssen möglicherweise etwas hinzufügen zunächst Datei Existenz zu überprüfen, aber das ist die Idee.
fand ich diesen Ansatz sinnvoll, wenn ich eine /:userName
Strecke wollte, die mit allen nicht meiner widerspräche /contact
, /about
, /robots.txt
, /favicon.ico
usw. Allerdings dauert es Arbeit so zu halten, wenn Sie der erste Ansatz denken arbeiten kann für dich würde ich das benutzen.
'GET /: Kategorie /: Unterkategorie /: Schlüsselwort' ist ein bisschen wie sagen 'GET/*/*/*' so wahrscheinlich es entspricht Ihrem '/' .. Wenn Sie als nächstes auf nicht passenden Routen in Ihrem aufrufen 'GET /: category ...', können Sie die Reihenfolge umkehren, damit sie zuerst überprüft wird. – Keith
Also muss ich 'GET /: category /: subcategory /: keyword' route an erster Stelle ?? – Jabaa
Eigentlich nein .. ich glaube nicht, dass das Sinn macht .. ähm .. ich habe sails.js nicht wirklich benutzt .. aber ich habe das Gefühl du könntest 'GET/'auf der ersten Route haben. – Keith