J'utilise Express pour gérer un itinéraire au format /articles/:year/:month/:day
, où année, mois et jour sont facultatifs.
Ma question est, comment puis-je les rendre facultatifs? Avec l'itinéraire actuel que j'ai défini, à moins que les trois paramètres ne soient présents, il ne pourra pas être résolu et tombera dans l'itinéraire par défaut.
Le guide de expressjs to routing mentionne:
Express utilise
path-to-regexp
pour faire correspondre les chemins de la route; voir le path-to-regexp documentation pour toutes les possibilités de définition de chemins de la route. Express Route Tester est un outil pratique pour tester les bases Itinéraires express, bien qu'il ne prenne pas en charge la correspondance de modèle.
Fondamentalement, vous pouvez utiliser le caractère ?
pour rendre le paramètre facultatif.
/articles/:year?/:month?/:day?
Édité dans le but d'avoir les 3 différentes options en une réponse. Nous remercions @ hjpotter92 pour sa réponse regex.
Avec URL Params
Avec regex
app.get('/articles/:year?/:month?/:day?', function(req, res) {
var year = req.params.year; //either a value or undefined
var month = req.params.month;
var day = req.params.day;
}
Sans regex
var getArticles = function(year, month, day) { ... }
app.get('/articles/:year', function(req, res) {
getArticles(req.params.year);
}
app.get('/articles/:year/:month', function(req, res) {
getArticles(req.params.year, req.params.month);
}
app.get('/articles/:year/:month/:day', function(req, res) {
getArticles(req.params.year, req.params.month, req.params.day);
}
Définissez les 3 chemins que vous souhaitez prendre en charge et réutilisez la même fonction
Avec les paramètres de requête
app.get('/articles', function(req, res) {
var year = req.query.year; //either a value or undefined
var month = req.query.month;
var day = req.query.day;
}
L'URL de ce noeud final ressemblera à ceci:
http://localhost/articles?year=2016&month=1&day=19
Ce type de route ne fonctionnera probablement pas à cause des traits de soulignement dans les paramètres transmis.
app.get('/products/:product_Id/buyers/:buyer_Id', function(req, res) {
getArticles(req.params.product_Id, req.params.buyer_Id);
}
Je vous suggère donc d'utiliser le système de routage suivant si le routage ne fonctionne pas. Vous pourrez y envoyer plusieurs paramètres.
app.get('/products/:productId/buyers/:buyerId', function(req, res) {
getArticles(req.params.productId, req.params.buyerId);
}