¿Por qué una URL reconocible para Express.js no es como las URL habituales que vemos?
Por ejemplo: Express.js reconocerá esta URL (http://localhost:3000/things/0) donde id=0 si realizo esta solicitud GET:
app.get('/things/:id', (req, res) => { // Do somethihng });
Pero esta URL (http://localhost:3000/things/?id=0), que se parece más a las URL habituales que vemos, no funcionará para la misma solicitud GET anterior.
(http://localhost:3000/things/?id=0) que se parece más a las URL habituales
Es un marco y no hace lo que usted y yo pensamos. Tiene un conjunto de reglas. Hablando de las mejores prácticas para la API RESTFUL , el diseño es que los parámetros de ruta ( /:id
) se usan para identificar un recurso o recursos específicos, mientras que los parámetros de consulta ( ?id
) se usan para ordenar/filtrar esos recursos. Entonces, para /things/?id=0
, deberíamos usar parámetros de consulta.
vemos que no funcionará para la misma solicitud GET anterior.
No funcionará de esa manera. Para obtener parámetros de consulta, use algo como
app.get('/things', (req, res) => { let id = req.query.id; // here you can get id. });
PARÁMETROS DE CONSULTA: ¿Cómo obtener variables GET (cadena de consulta) en Express.js en Node.js?
ACERCA DE URL: https://developer.mozilla.org/en-US/docs/Learn/Common_questions/What_is_a_URL
Por lo tanto, las "URL normales" aparentemente están en el ojo del espectador, ya que en realidad solo hay diferentes estilos, ninguno de los cuales es más normal que el otro.
Hay un par de formas de pasar parámetros en una URL.
#1 - Puedes incrustarlo en la ruta de la URL
https://someserver/things/0 https://contacts.google.com/person/c3429579852656514228
Esto se conoce como un diseño RESTFUL. Estas URL contienen un sustantivo y luego una identificación que identifica a cuál de esos sustantivos se refiere la URL.
#2 - Puedes poner la parte variable de la URL en un parámetro de consulta
Para esas mismas dos URL anteriores, eso podría verse así:
https://someserver/things?id=0 https://contacts.google.com/person?id=c3429579852656514228
Hay razones válidas para ambos diseños según las circunstancias e incluso hay casos en los que combina los dos (agregue parámetros de consulta opcionales a los diseños de API tranquilos en la opción n. ° 1. Ninguno es "normal": son formas diferentes de diseñar sus URL .
Express le permite usar cualquiera de los dos. Para parámetros tranquilos que están en la ruta de la URL, usa la sintaxis :id
y accede al valor en req.params.id
:
app.get('/things/:id', (req, res) => { console.log(req.params.id); res.send(req.params.id); });
Para los parámetros de consulta, no los define en la ruta de la ruta rápida. En cambio, Express analiza cualquier parámetro de consulta que exista en cualquier ruta y los pone a disposición en req.query
.
// expecting /things?id=789&sort=alpha app.get('/things', (req, res) => { console.log(req.query.id); // "789" console.log(req.query.sort); // "alpha" res.send(req.query.id); });
Cualquier parámetro de consulta que esté presente en la URL se agregará al objeto req.query
.
Tenga en cuenta que los parámetros de consulta a menudo se consideran opcionales y, por lo tanto, no los codifica en su definición de ruta. Si desea solicitar un parámetro de consulta específico, debe verificar si está allí y, de lo contrario, proporcionar alguna respuesta de error o llamar a next()
para continuar con el enrutamiento a otros controladores de solicitudes.
FYI, hay otro estilo que a menudo usa código del lado del cliente para ayudar a construir esa página y también coloca argumentos de URL en una etiqueta hash, pero lo dejaré para otro día.