Ich habe einen Weg, der wie folgt aussieht:Express.js Routing: Optional spuckt param?
app.all('/path/:namedParam/*splat?',function(req,res,next){
if(!req.params.length){
// do something when there is no splat
} else {
// do something with splat
}
});
aber das funktioniert nicht - wenn ich path/foo/bar
nennen trifft es die Strecke, aber wenn ich path/foo
nennen, es funktioniert nicht.
Ist es möglich, einen optionalen Splat-Parameter zu haben, oder muss ich einen Regex verwenden, um dies zu erkennen?
bearbeiten:
seine klare, hier sind die Anforderungen, die ich zu erreichen bin versucht:
- der erste und zweiter params sind erforderlich
- die erste param statisch , der zweite ist ein benannter Param.
- eine beliebige Anzahl von optional zusätzliche Parameter können angehängt werden und immer noch die Route.
Was versuchen Sie zu tun?Wenn Sie Splat nicht wissen müssen, tun Sie einfach "/ path /: firstParam/*". Wenn Sie es brauchen, tun Sie "/ path /: firstParam /: secondParam?/*". –
Ich suche nach dem Splat optional - das erste Beispiel, das du gabst, würde nicht mit '/ path/foo' übereinstimmen (so sah meine Route ursprünglich aus, bevor ich einen optionalen Splat wollte). Darüber hinaus, in Ihrem zweiten Beispiel, das Hinzufügen der Splat negiert tatsächlich die optionale zweite Parameter - '/ Pfad/foo' wird nicht mit Ihrem zweiten Muster (auch nicht'/Pfad/foo/bar 'für diese Angelegenheit ...) - einer von die nervigeren Teile von Express 'Router. – Jesse
persönlich würde ich nur für '/ Pfad /: FirstParam' und'/Pfad /: FirstParam /: SecondParam/'als zwei separate Router mit einem gemeinsamen Controller gehen. keine Notwendigkeit, Ihre URLs verwirrend zu machen –