Para esta lección necesitamos crear un servidor de tiempo del Protocolo de Control de Transmisión (TCP) que escriba la fecha y hora actual en el zócalo en formato de 24 horas.

Leccion-10 learnyounode Lección 10 – Time Server

Además de un módulo http, el nodo también tiene un módulo TCP que puede ser invocado con require(‘net’). Si no está familiarizado con el modelo de red TCP/IP, estamos profundizando hasta un nivel por debajo de la capa de aplicación, con la que trabajamos en lecciones anteriores con el módulo http.

Para evitar la frustración de antemano, es importante tener en cuenta que los datos del servidor de tiempo sólo necesitan ser escritos en el socket abierto de nuestro servidor.

No es necesario que esté registrado en la consola. Para ello sólo tenemos que crear una función que devuelva la fecha y la hora en el formato deseado, y llamar a esa función dentro del método socket.end().

Otro punto importante es que tenemos que rellenar nuestros resultados a cero. Eso significa que las 7:00 deben presentarse como las 7:00.

Hay módulos que lo harán por usted, pero la solución oficial para este problema es una función muy útil para formatear correctamente la hora.

Solución oficial

var net = require(‘net’)
 
function zeroFill(i) {
  return (i < 10 ? ‘0’ : ») + i
}
 
function now () {
  var d = new Date()
  return d.getFullYear() + ‘-‘
    + zeroFill(d.getMonth() + 1) + ‘-‘
    + zeroFill(d.getDate()) + ‘ ‘
    + zeroFill(d.getHours()) + ‘:’
    + zeroFill(d.getMinutes())
}
 
var server = net.createServer(function (socket) {
  socket.end(now() + ‘\n’)
})
 
server.listen(Number(process.argv[2]))

Como puede ver, la solución oficial utiliza una función llamada zeroFill, que acepta la’i’ como argumento.

La función zeroFill utiliza el operador condicional (ternario) para determinar si se debe colocar un cero delante de un valor. Si ‘i’ es menor de 10, i < 10 se evalúa a verdadero, y zeroFill devuelve ‘0’ + i. Si ‘i’ no es menor de 10, i < 10 se evalúa a falso, y zeroFill devuelve una cadena vacía + ‘i’.

El operador condicional no está cubierto en los módulos de codecademy.com que yo recuerde. A menudo se usa en lugar de una declaración if/else. La sintaxis básica es la siguiente.

condition ? ‘expression if true’ : ‘expression if false’

Para más información sobre el condicional, consulte la escritura de MDN.

La solución oficial utiliza una segunda función llamada’ahora’ para formatear correctamente la fecha y la hora utilizando el objeto Date(). El objeto Date() se asigna a la variable ‘d’. Luego obtenemos el año completo con getFullYear() y lo concatenamos con el símbolo de guión.

Después de esto concatenamos el resultado de zeroFill(d.getmonth()) y así sucesivamente hasta llegar a minutos para obtener nuestra fecha correctamente formateada. La solución oficial divide esto en varias líneas para facilitar su lectura.

A continuación, asignamos el método net.createServer() al servidor de variables. El método createServer() acepta una llamada de retorno como argumento, que acepta un socket. Dentro de la llamada de retorno, llamamos al método socket.end() y pasamos now() más un carácter de nueva línea al método end() para escribir la fecha y hora en el socket.

Finalmente, escuchamos con el método listen() para el puerto pasado como segundo argumento de la línea de comandos.

Si desea registrar la fecha y la hora en la consola en lugar de escribirla en el socket, puede utilizar el siguiente código. Sin embargo, el código de abajo no pasará la lección, así que ten cuidado.

var net = require(‘net’)
var port = process.argv[2]
 
function zeroFill (i) {
  return (i < 10 ? ‘0’ : ») + i
}
 
function now () {
  var d = new Date()
  return d.getFullYear() + ‘-‘ +
    zeroFill(d.getMonth() + 1) + ‘-‘ +
    zeroFill(d.getDate()) + ‘ ‘ +
    zeroFill(d.getHours()) + ‘:’ +
    zeroFill(d.getMinutes())
}
 
var server = net.createServer(function (socket) {
  socket.on(‘data’, function (data) {
    console.log(data.toString())
  })
})
server.listen(port)
 
var socket = require(‘net’).Socket()
socket.connect(port)
socket.end(now() + ‘\n’)

Para ejecutar este programa, descargue el archivo y guárdelo como timeServer.js. Luego, ejecútalo desde el directorio en el que lo guardaste.

node timeServer.js 8000

Presione control+c para salir.

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