route req node create body another node.js express

node.js - req - Enrutamiento de comodín Express-js para cubrir todo debajo e incluir un camino



post express node (5)

Además de las otras respuestas, también puede usar la función app.all() para asignar a todos los métodos http ( POST , GET , etc.) que le permitirán seguir el principio DRY aún más.

En lugar de necesitar escribir:

app.get(''/foo'', /* function */); // and this app.post(''/foo'', /* same function used here*/);

Simplemente puede hacer esto:

app.all(''/foo'', /* function */);

Que se llamará tanto para app.get(''/foo'') como para app.post(''/foo'') .

Si quiere cubrir todos los métodos para todas las rutas, puede hacer esto:

app.all(''*'', /* function */);

Cuando digo todos los métodos, quiero decir todo . Estaba usando un módulo llamado "método-anulación", que me permitió usar métodos adicionales como PUT y DELETE , y la función app.all() cubrió esas solicitudes también.

app.all(''*'', /* function */); ^ | this should cover all of these | v app.get(''*'', /* function */); app.post(''*'', /* function */); app.put(''*'', /* function */); app.delete(''*'', /* function */); ...

Busque la app.all en la documentación de Express 4 para leer todo sobre app.all()

Estoy tratando de tener una ruta que cubra todo bajo /foo incluyendo /foo . He intentado usar /foo* que funciona para todo, excepto que no coincide con /foo . Observar:

var express = require("express"), app = express.createServer(); app.get("/foo*", function(req, res, next){ res.write("Foo*/n"); next(); }); app.get("/foo", function(req, res){ res.end("Foo/n"); }); app.get("/foo/bar", function(req, res){ res.end("Foo Bar/n"); }); app.listen(3000);

Productos:

$ curl localhost:3000/foo Foo $ curl localhost:3000/foo/bar Foo* Foo Bar

¿Cuáles son mis opciones? Lo mejor que he encontrado es route /fo* que, por supuesto, no es muy óptimo ya que coincidiría demasiado.


Ahora se ha eliminado el enrutador de conexión ( https://github.com/senchalabs/connect/issues/262 ), y el autor indica que debe usar un marco de trabajo además de connect (como Express) para el enrutamiento.

Actualmente, Express trata a app.get("/foo*") como app.get(///foo(.*)/) , Eliminando la necesidad de dos rutas separadas. Esto está en contraste con la respuesta anterior (refiriéndose al enrutador de conexión ahora eliminado) que indica que " * en una ruta se reemplaza con .+ ".

Actualización: Express ahora usa el módulo "path-to-regexp" (desde Express 4.0.0) que mantiene el mismo comportamiento en la versión referenciada actualmente. No estoy seguro de si la última versión de ese módulo mantiene el comportamiento, pero por ahora esta es la respuesta.


Creo que deberás tener 2 rutas. Si mira la línea 331 del enrutador de conexión, * en una ruta se reemplaza por. + Por lo que coincidirá con 1 o más caracteres.

https://github.com/senchalabs/connect/blob/master/lib/middleware/router.js

Si tiene 2 rutas que realizan la misma acción, puede hacer lo siguiente para mantenerla DRY .

var express = require("express"), app = express.createServer(); function fooRoute(req, res, next) { res.end("Foo Route/n"); } app.get("/foo*", fooRoute); app.get("/foo", fooRoute); app.listen(3000);


En array también puede usar variables que pasen a req.params:

app.get(["/:foo", "/:foo/:bar"], /* function */);


Para aquellos que están aprendiendo node / express (como yo): ¡no utilicen enrutamiento comodín si es posible!

También quería implementar el enrutamiento para GET / users /: id / whatever utilizando enrutamiento comodín. Así es como llegué aquí.

Afortunadamente, también encontré este artículo: http://www.jongleberry.com/wildcard-routing-is-an-anti-pattern.html

Saludos, Robert