Request
El objeto request contiene información sobre la petición que hace el cliente al servidor.
Hablemos de sus propiedades.
Headers
Si queremos saber información sobre la petición podemos obtener los headers utilizando el método “get”:
app.get("/", function(request, response) { response.send(request.get('user-agent')); });12345 appget("/",function(request,response){ responsesend(requestget('user-agent')); });
Si visitamos esta ruta obtendremos un mensaje similar al siguiente:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.361 Mozilla/5.0(Macintosh;Intel Mac OSX10_8_5)AppleWebKit/537.36(KHTML,like Gecko)Chrome/27.0.1453.93Safari/537.36
Si queremos una lista de los “content types” aceptados podemos invocar la propiedad accepted:
app.get("/", function(request, response) { response.send(request.accepted); });12345 appget("/",function(request,response){ responsesend(requestaccepted); });
Esto retornará una lista de los contenidos aceptados similar a la siguiente:
[ { "value": "text/html", "quality": 1, "params": {}, "originalIndex": 0, "type": "text", "subtype": "html" }, { "value": "application/xhtml+xml", "quality": 1, "params": {}, "originalIndex": 1, "type": "application", "subtype": "xhtml+xml" }, { "value": "application/xml", "quality": 0.9, "params": {}, "originalIndex": 2, "type": "application", "subtype": "xml" }, { "value": "*/*", "quality": 0.8, "params": {}, "originalIndex": 3, "type": "*", "subtype": "*" } ]12345678910111213141516171819202122232425262728293031323334 [ { "value":"text/html", "quality":1, "params":{}, "originalIndex":0, "type":"text", "subtype":"html" }, { "value":"application/xhtml+xml", "quality":1, "params":{}, "originalIndex":1, "type":"application", "subtype":"xhtml+xml" }, { "value":"application/xml", "quality":0.9, "params":{}, "originalIndex":2, "type":"application", "subtype":"xml" }, { "value":"*/*", "quality":0.8, "params":{}, "originalIndex":3, "type":"*", "subtype":"*" }]
También podemos verificar “character sets” utilizando acceptedCharsets:
app.get("/", function(request, response) { response.send(request.acceptedCharsets); });12345 appget("/",function(request,response){ responsesend(requestacceptedCharsets); });
Y esto retornara una lista con los character sets aceptados. También podemos preguntar por uno en especifico:
app.get("/", function(request, response) { response.send(request.acceptsCharset('utf-8') ? 'yes' : 'no'); });12345 appget("/",function(request,response){ responsesend(requestacceptsCharset('utf-8')?'yes':'no'); });
Y aquí le pongo ? 'yes' : 'no'
porque esta función retorna un valor booleano.
Podemos preguntar por el idioma aceptado en este request:
app.get("/", function(request, response) { response.send(request.acceptedLanguages); });12345 appget("/",function(request,response){ responsesend(requestacceptedLanguages); });
Esto retornará una lista de con los idiomas aceptados.
Igualmente que con los character sets, podemos pedir uno en especifico:
app.get("/a", function(request, response) { response.send(request.acceptsLanguage('es') ? 'yes' : 'no'); });12345 appget("/a",function(request,response){ responsesend(requestacceptsLanguage('es')?'yes':'no'); });
Parámetros
Sobre los parámetros ya hablamos en el capitulo “definiendo rutas”. Por lo tanto aquí solo voy a agregar alunas cosas que no mencioné anteriormente.
Como bien sabemos podemos solicitar el parámetro enviado en el url de la siguiente manera:
app.get("/name/:name", function(request, response) { response.send("Hola, " + request.params.name); });12345 appget("/name/:name",function(request,response){ responsesend("Hola, "+requestparamsname); });
Lo nuevo que voy a introducir es la posibilidad de hacer un parámetro opcional. Esto se logra agregando un ?
al final del url:
12345 appget("/name/:name?",function(request,response){ responsesend("Hola, "+requestparamsname); });
También podemos agregar un valor por defecto al parámetro usando el método param
en vez de la propiedad params
:
12345 appget("/name/:name?",function(request,response){ responsesend(requestparam('name','valor default')); });
Otras propiedades
Estas fueron algunas de la propiedades más usadas del objeto request, hay muchas otras que no voy a explicar pero que puedes conseguir en la documentación del framework. Estas son:
- protocol
- secure
- ip
- ips
- auth
- subdomains
- path
- host
- fresh
- stale
- xhr
Response
También hay mucho que puede hacerse con el objeto response. Veamos.
Códigos de estatus
El método send
lo hemos venido usando para enviar el body de nuestra respuesta, pero también podemos enviar un código de estatus con un mensaje custom:
12345 appget("/a",function(request,response){ responsesend(403,'prohibido el acceso :P'); });
Si enviamos el código solo obtendremos el mensaje estándar para este código.
Para mayor información sobre códigos de estatus del protocolo http visita la siguiente página de wikipedia.
Enviando json
Para enviar json solo hay que usar el método json
:
12345 appget("/",function(request,response){ responsejson({message:'¡hola!'}); });
Aqui estamos enviando un objeto de javascript, el método json
se encarga de hacerle “stringify” y mandarlo con “content type” = “application/json”.
Asignando el content type
Normalmente el content type se asigna automaticamente, pero podemos asignarlo manualmente si queremos:
app.get("/", function(request, response) { response.type('image/png').send('esto es una imagen'); });12345 appget("/",function(request,response){ responsetype('image/png')send('esto es una imagen'); });
Formato
El método formar
retorna el tipo de respuesta que el cliente pueda aceptar:
123456789 appget("/",function(request,response){ responseformat({ html:function(){responsesend('<h1> Hola </h1>');}, json:function(){responsejson({message:"Hola"})}, text:function(){responsesend("hola")}, }); });
Si pedimos esta ruta en el browser vamos a obtener la respuesta “Hola” en un “H1″, pero si vamos a la consola podemos obtener las otras respuestas:
$ curl localhost:3000 -H "accept: application/json" { "message": "Hola" } $ curl localhost:3000 -H "accept: text/plain" hola1234567 $curl localhost:3000-H"accept: application/json"{ "message":"Hola"} $curl localhost:3000-H"accept: text/plain"hola
redireccionando
Redireccionar es tan simple como llamar al método:
app.get("/", function(request, response) { response.redirect('/name'); });12345 appget("/",function(request,response){ responseredirect('/name'); });
Otros métodos
Nuevamente, no voy a hablar de todas las propiedades y métodos de este objeto, sin embargo les dejo aquí la lista de cuales existen para su investigación personal:
- sendfile
- download
- attachment
- links
- clearCookie
- cookies
Conclusión
Con los conocimientos obtenidos hoy ya tenemos una base sólida sobre las peticiones y respuestas en Express.
Espero haber sido de ayuda. Como siempre, nunca esta de más decir que cualquier duda puede ser aclarada en la sección de comentarios más abajo.
Adiós.