route parameter node node.js express routing

node.js - parameter - ¿Múltiples parámetros de ruta opcionales en Express?



route get parameters node js (3)

Estoy usando Express para manejar una ruta que está en el formato de /articles/:year/:month/:day , donde year, month y day son opcionales.

  • Si no se da ninguno de los tres parámetros, se devolverán todos los artículos;
  • Si se da el año, los artículos de ese año serán devueltos;
  • Si se dan año y mes, los artículos de ese año y mes serán devueltos;
  • Si se dan los tres parámetros, se devolverán los artículos de ese año, mes y día.

Mi pregunta es, ¿cómo los hago opcionales? Con la ruta actual que he definido, a menos que los tres parámetros estén presentes, no podrá resolverse y caerá en la ruta predeterminada.


Editado con el propósito de tener las 3 opciones diferentes en una respuesta. Gracias a @ hjpotter92 por su respuesta a expresiones regulares.

Con los parámetros de URL

Con 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; }

Sin 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); }

Defina las 3 rutas que desea admitir y reutilice la misma función

Con parámetros de consulta

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; }

La url para este punto final se verá así:

http://localhost/articles?year=2016&month=1&day=19


La guía de expressjs para las menciones de enrutamiento:

Express usa path-to-regexp para hacer coincidir las rutas de ruta; Consulte la documentación de path-to-regexp para ver todas las posibilidades de definir rutas de ruta. Express Route Tester es una herramienta útil para probar rutas Express básicas, aunque no admite la coincidencia de patrones.

Básicamente, puedes usar el ? Carácter para hacer el parámetro opcional.

/articles/:year?/:month?/:day?


No es probable que este tipo de ruta funcione debido a los guiones bajos en los parámetros pasados.

app.get(''/products/:product_Id/buyers/:buyer_Id'', function(req, res) { getArticles(req.params.product_Id, req.params.buyer_Id); }

Por lo tanto, le sugiero que utilice el siguiente sistema de rutas si la ruta no funciona. Allí podrás enviar múltiples parámetros.

app.get(''/products/:productId/buyers/:buyerId'', function(req, res) { getArticles(req.params.productId, req.params.buyerId); }