Para esta lección necesitamos crear un servidor HTTP que sólo acepte peticiones POST. El cuerpo del POST debe convertirse en una cadena en mayúsculas y devolverse al cliente a través de la respuesta del servidor.

Leccion-12 learnyounode Lección 12 – HTTP Uppercase

Como en las lecciones anteriores, el servidor debería escuchar en el puerto proporcionado como primer argumento al programa (process.argv[2]).

En la lección anterior aprendimos un poco sobre tuberías y streaming. Aunque no es obligatorio, el uso de las APIs de streaming de peticiones y respuestas hará que esta lección sea mucho más fácil. Además, podemos usar módulos de nodos para ayudarnos, como through2-map, que pueden ser usados para transformar datos de streaming.

Una solución

var http = require(‘http’)

var map = require(‘through2-map’) 

var port = process.argv[2] 

http.createServer(function (request, response) {  

// check to see if request method is POST  

if (request.method === ‘POST’) {    

// write request status and content type to resposne head    response.writeHead(200, {‘Content-Type’: ‘text/plain’})    

// stream request to through2-map with pipe()    request.pipe(map(function (chunk) {      

// convert request to uppercase string      

return chunk.toString().toUpperCase()     

 // stream result to response with pipe()    

})).pipe(response)  

} else {    

// write method not allowed error to response header if method not POST    response.writeHead(405)  

}

}).listen(+port, function () {  

console.log(‘Server listening on http://localhost:%s’, port)

})

En la solución anterior, estamos asignando los módulos http y through2-map a las variables http y map. También estamos asignando el primer argumento de nuestro programa al puerto variable.

A continuación, creamos un servidor y pasamos una función de devolución de llamada que acepta una petición y una respuesta como argumentos. Dentro de nuestra devolución de llamada, estamos comprobando si el método de la petición (request.method) enviada a nuestro servidor es igual a POST. Si es así, estamos escribiendo el estado 200 y el tipo de contenido al cabezal de respuesta y canalizando la petición al método map().

Al método map() se le pasa una llamada de retorno que acepta chunk como argumento. Dentro de esta llamada de retorno están devolviendo el valor de nuestro portabrocas, que se convierte en una cadena en mayúsculas con los métodos toString() y toUpperCase(). Luego estamos pinchando el valor devuelto a la respuesta con el método pipe().

Si el método de solicitud no es igual a POST, estamos escribiendo el estado 405 al cabezal de respuesta. El código de error 405 es el código de error utilizado si no se permite un método, como GET.

Finalmente, estamos escuchando el puerto pasado como primer argumento al programa, coaccionando el puerto a un número usando el operador unary +, y registrando la ubicación del servidor en la consola.

A modo de comparación, la solución oficial se pega a continuación.

Solución oficial

var http = require(‘http’)
var map = require(‘through2-map’)
 
var server = http.createServer(function (req, res) {
if (req.method != ‘POST’)
   return res.end(‘send me a POST\n’)
 
req.pipe(map(function (chunk) {
   return chunk.toString().toUpperCase()
})).pipe(res)
})
 
server.listen(Number(process.argv[2]))

Reader Interactions

Deja un comentario

Tu dirección de correo electrónico no será publicada.

About David Moya

Apasionado de la Seguridad Informática, aprendiendo en todo momento y profundizando en el mundo web y en el posicionamiento en buscadores.

Share This