Tu primera experiencia con Node.js

1

驴D贸nde aprender backend con Node.js actualizado?

2

Todo lo que aprender谩s sobre backend con Node.js

3

驴Qu茅 es Node.js?

4

驴Qu茅 es Node.js y para qu茅 sirve?

5

Diferencias entre Node.js y JavaScript

6

Resumen: Diferencias Nodejs y Javascript

7

Instalaci贸n de Node.js

8

Arquitectura orientada a eventos

9

Node.js para la web

Manejo y uso de Streams con Node.js

10

Introducci贸n a streams

11

Readable y Writable streams

12

Duplex y Transforms streams

Uso de utilidades de Node.js

13

Sistema operativo y sistema de archivos

14

Administrar directorios y archivos

15

Consola, utilidades y debugging

16

Clusters y procesos hijos

Crea tu primer proyecto en Express.js

17

驴Qu茅 es Express.js y para qu茅 sirve?

18

Creando tu primer servidor con Express.js

19

Request y Response Objects

Aprende a crear un API con REST

20

Anatom铆a de una API Restful

21

Estructura de una pel铆cula con Moockaru

22

Implementando un CRUD en Express.js

23

M茅todos idempotentes del CRUD

24

Implementando una capa de servicios

C贸mo conectarse con librer铆as externas en Express.js

25

Creaci贸n de una BD en MongoAtlas

26

Conexi贸n a MongoAtlas una instancia de MongoDB

27

Conexi贸n con Robot3T y MongoDB Compass a una BD

28

Implementaci贸n de las acciones de MongoDB

29

Conexi贸n de nuestros servicios con MongoDB

Conoce como funcionan los Middleware en Express.js

30

驴Qu茅 es un middleware? Capa de manejo de errores usando un middleware

31

Manejo de errores as铆ncronos y s铆ncronos en Express

32

Capa de validaci贸n de datos usando un middleware

33

驴Qu茅 es Joi y Boom?

34

Implementando Boom

35

Implementando Joi

36

Probar la validaci贸n de nuestros endpoints

37

Middlewares populares en Express.js

Implementa tests en Node.js

38

Creaci贸n de tests para nuestros endpoints

39

Creaci贸n de tests para nuestros servicios

40

Creaci贸n de tests para nuestras utilidades

41

Agregando un comando para coverage

42

Debugging e inspect

Despliega tu primera aplicaci贸n en Express.js

43

Considerando las mejores pr谩cticas para el despliegue

44

Variables de entorno, CORS y HTTPS

45

驴C贸mo implementar una capa de manejo de cach茅?

46

驴C贸mo contener tu aplicaci贸n en Docker?

47

Despliegue en Now

Conclusiones

48

驴Qu茅 aprendiste en este curso?

No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Node.js para la web

9/48
Recursos

Aportes 232

Preguntas 9

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

Con la libreria momentjs

body = Buffer.concat(body).toString();
let fecha = moment(body, "DD/MM/YYYY");
let dia = fecha.format("dddd");
res.end(dia);
const http = require("http");
const moment = require("moment");

const server = http.createServer();

server.on("request", (req, res) => {
  if (req.method === "POST" && req.url == "/echo") {
    let body = [];
    req
      .on("data", chunk => {
        body.push(chunk);
      })
      .on("end", () => {
        res.writeHead(200, { "Content-type": "text/plain" });
        body = Buffer.concat(body).toString();
        if (!moment(body, "YYYY-MM-DD").isValid()) {
          res.end("no es un formato valido. Formato esperado YYYY-MM-DD");
        } else {
          var weekDayName = moment(body).format("dddd");

          res.end("Tu dia de Nacimiento es:" + weekDayName);
        }
      });
  } else {
    res.statusCode = 404;
    res.end();
  }
});

server.listen(8002);
console.log("Servidor enla url http://localhost:8002");

Utilizando el Modulo Moment

// El modulo moment es genial
const moment = require('moment');
let fecha = moment(body);
res.end(fecha.format('dddd')); // el formato 'dddd' es para que solo muestre el dia en texto.

Mi aporte

const http = require('http');
const server = http.createServer();

server.on('request', (req, res) => {
    let birthday = [];

    req.on('data', chunk => birthday.push(chunk.toString()));
    req.on('end', () => {
        res.writeHead(200, {'Content-Type': 'text/plain'});
        res.end(`Tu d铆a de nacimiento es: ${getDayOfBirthday(birthday)}`);
    })

});

function getDayOfBirthday(date) {
    const days = ['Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes', 'Sabado', 'Domingo'];
    const birthday = new Date(date);
    return days[birthday.getDay()]
}

server.listen(8001);

console.log('Servidor en la url http://localhost:8001')

Pues ac谩 est谩 mi servidor que valida una fecha

const http = require('http');
const server = http.createServer();

server.on('request',(req,res)=>{
    if(req.method === 'POST' && req.url=='/'){
        let body=[];
        const days=['Domingo','Lunes','Martes','Mi茅rcoles','Jueves','Viernes','S谩bado'];
        const months = ['enero','febrero','marzo','abril','mayo','junio','julio','agosto','septiembre','octubre','noviembre','diciembre'];

        req.on('data', (chunk)=>{
            body.push(chunk);
        })
        .on('end',()=>{
            res.writeHead(200,{'Content-Type':'text/plain'})
            body=Buffer.concat(body).toString();
            const birthday=new Date(body)
            if(birthday.getFullYear()){
                res.end(`Naciste un ${days[birthday.getDay()]}, ${birthday.getDate()+1} de ${months[birthday.getMonth()]} de ${birthday.getFullYear()}`);
            }else{
                res.end(`Inserta una fecha correcta con el formato YYYY-MM-DD`)
            }
        })

    }else{
        res.statusCode=404;
        res.end();
    }
})

server.listen(8000);
console.log('servidor en la url http://localhost:8000')```

Soluci贸n a mi reto:

//formato de fecha de entrada: opcion 1: 10-16-2019, opcion2: 2019/10/16
const http = require('http');
const server = http.createServer();

const weekday = new Array(7);
weekday[0] = "Domingo";
weekday[1] = "Lunes";
weekday[2] = "Martes";
weekday[3] = "Miercoles";
weekday[4] = "Jueves";
weekday[5] = "Viernes";
weekday[6] = "Sabado";

server.on('request', (req, res)=> {
  if(req.method == 'POST' && req.url === '/birthday'){
    let body = []
    req.on('data', chunk => {
      body.push(chunk)
    })
    .on('end', () => {
      res.writeHead(200, {'Content-Type': 'text/plain'})
      let dayOfBirth = new Date(body)
      console.log(weekday[dayOfBirth.getDay()])
      body = Buffer.concat(body).toString()
      res.end(body)
    })
  }else{
    res.statusCode = 404
    res.end()
  }
})

server.listen(8001)
console.log('servidor en la url: http://localhost:8001')```

馃

const http = require('http');
const server = http.createServer();

const semana = ['Domingo', 'Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes', 'Sabado'];
        
server.on('request', (req, res) => {
    if (req.method === 'POST' && req.url == '/adivinarDia') {  
        let body = [];
        
        req.on('data', chunk => {
            body.push(chunk);
        })
        .on('end', () => {            
            body = Buffer.concat(body).toString();
            const date = new Date(body);
            let diaSemana = semana[date.getDay()];

            res.writeHead(200, {"Content-type": "text-plain"});
            res.end(`El dia de mi nacimiento fue un ${diaSemana}`);
        })
    }
    else {
        res.status = 404;
        res.end();
    }
})
const PORT = 3003;

server.listen(PORT, () => {
    console.log(`Eschuchando en el puerto ${PORT}`)
});

El challenge me quedo de la siguiente manera, ya que no encontre el como darle formato al input que requiere Date.getDay(), y asi obtener el dia en menos lineas de codigo.

Les comparto mi reto, tuve que modificar un poco para que se vea bien en los aportes de platzi, pueden utilizarlo de referencia, espero les ayude 馃槂

//obtain http module for create the server
const http = require('http')
//create the server and assign to const
const server = http.createServer()

const isValidMethod = (req, method) => {
  return req.method === method ? true : false
}

const isValidUrl = (req, url) => {
  return req.url == url ? true : false
}

const getWeekDay = date => {
  const weekDays = [
    'Sunday',
    'Monday',
    'Tuesday',
    'Wednesday',
    'Thursday',
    'Friday',
    'Saturday'
  ]
  const message = 'Your were born on'
  return `${message} ${weekDays[date.getDay()]}`
}

//handle events
server.on('request', (request, response) => {
  const okMethod = isValidMethod(request, 'POST')
  const okUrl = isValidUrl(request, '/challenge')
  const content = { 'Content-Type': 'text/plain' }
  if (okMethod && okUrl) {
    let body = new Array()
    //handle data
    request
      .on('data', chunk => {
        /*chunk is the data that we sent 
         in the request*/
        body.push(chunk)
      })
      .on('end', () => {
        //now body contains your birth date
        body = Buffer.concat(body).toString()
        let birthDate = new Date(body)
        response.writeHeader(200, content)
        response.end(getWeekDay(birthDate))
      })
  } else {
    response.writeHeader(400, content)
    response.end('404 not found :C')
  }
})

server.listen(8002)
console.log('running on http://localhost:8002/challenge')
/*
in posttman try with your birthdate
like yyyy mm dd
1994 12 09
*/
const http = require('http');
const server = http.createServer();
const days = ['Domingo', 'Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes', 'Sabado'
];

const getDayName = function (chunk) {
  if ( Date.parse(chunk) ) {
    let date = new Date (chunk);
    let dayNumber = date.getDay();
    return days[dayNumber];
  } else {
    return 'El formato de fecha no concuerda, intenta nuevamente.';
  }
}

server.on('request', (req, res) => {
  if (req.method === 'POST') {
    let body = [];

    req.on('data', chunk => {
      let dayName = getDayName(chunk);
      body.push(dayName);
    })
    .on('end', () => {
      res.writeHead(200, {'Content-Type' : 'text-plain'});

      res.end(body.toString());
    });
  };
});

server.listen(8003);
console.log('Cumpleserver en la url http://localhost:8003')```

Comparto mi tarea realizada!

Va mi soluci贸n.

/**
 * Este servidor echo, tiene como finalidad recibir datos (fecha de nacimiento) mediante POST
 * y responder con el nombre del d铆a que le corresponde a dicha fecha
 */
const http = require("http");
const server = http.createServer();

server.on("request", (req, res) => {
  if (req.method === "POST" && req.url === "/birthday") {
    let birthday = [];
    req
      .on("data", chunk => {
        birthday.push(chunk);
      })
      .on("end", () => {
        res.writeHeader(200, { "Content-type": "text/plain" });
        birthday = Buffer.concat(birthday).toString();
        const day = getDayBirth(birthday);
        res.end(`Tu naciste un d铆a ${day}`);
      });
  }
});

server.listen(3000, () => {
  console.log("Servidor escuchando en http://localhost:3000");
});

function getDayBirth(birthday) {
  // Tomando como base que la fecha me llega en YYYY-mm-dd
  const data = birthday.split("-");
  // Construir una fecha valida. el mes 0 es Enero
  const newdate = new Date(
    Number(data[0]),
    Number(data[1]) - 1,
    Number(data[2])
  );

  switch (newdate.getDay()) {
    case 0:
      return "Domingo";
    case 1:
      return "Lunes";
    case 2:
      return "Martes";
    case 3:
      return "Mi茅rcoles";
    case 4:
      return "Jueves";
    case 5:
      return "Viernes";
    case 6:
      return "S谩bado";
  }
}
const http = require('http');
const server = http.createServer();

server.on("request", (req, res) => {
    if (req.method === 'POST' && req.url == "/echo") {
        let body = [];

        req
            .on('data', chunck => {
                body.push(chunck)
            })
            .on('end', () => {
                res
                    .writeHead(200, 'Content-Type', 'text/plain');

                body = Buffer
                    .concat(body)
                    .toString()
                    .split('-');

                res
                    .end(returnDayOfWeekend(body));
            })
    } else {
        res.statusCode = 404;
        res.end();
    }

});

function returnDayOfWeekend(date) {

    date = new Date(date[0], date[1] - 1, date[2]);
    let day = '';

    switch (String(date.getDay())) {
        case '0': day = 'Domingo'
        break;
        case '1': day = 'Lunes'
        break;
        case '2': day = 'Martes'
        break;
        case '3': day = 'Miercoles'
        break;
        case '4': day = 'Jueves'
        break;
        case '5': day = 'Viernes'
        break;
        case '6': day = 'Sabado'
        break;
    }

    return `El dia de tu cumplea帽os es el dia ${day}`;
}

const PORT = '8001'
server.listen(PORT);
console.log(`Servidor iniciado en la url http://localhost:${PORT}`);

const http = require('http');
const server = http.createServer();

server.on('request', (req, res) => {
    if (req.method == 'POST' && req.url === '/edad') {
        let body = [];
        let semana = ['Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes', 'Sabado', 'Domingo'];
        req
          .on('data', chunck => {
            body.push(chunck);
        })
          .on('end', () => {
            res.writeHeader(200, { "Content-Type": "text/plain" });
            let edad = new Date(body);
            edad = semana[edad.getDay()];
            res.end('Naciste el d铆a ' + edad);
        });     
    } else {
        res.statusCode = 404;
        res.end();
    }
});

server.listen(3001);
console.log('Servidor en la url http://localhost:3001');

馃挭馃捇 Estoy en busca de los MEJORES DEVELOPERS de LATAM:
馃 驴Eres un Master Pro, Senior Developer en: TypeScript, Node.js, Scrapping, end-2-end browser Jira?
Queremos conocerte en: https://selectalatam.teamtailor.com/jobs/preview/477fb8a9-1a9b-45f3-926a-22356e6a0558

馃 驴Tu especialidad es: Node y MySql Tecnolog铆as secundarias: GraphQl?
Aplica ahora en: https://selectalatam.teamtailor.com/jobs/preview/8a2dea22-6f7c-4cc7-8540-7c07119bad11
馃 驴Tu gran amor es: Golang, Linux, Cloud Development, Java, C++ , JIRA?
Te esperamos en: https://selectalatam.teamtailor.com/jobs/preview/b833d966-6563-4ad0-9970-28715a4388cf

Es frustrante esforzarte en completar los retos y cuando quieres compartir tus resultados. La p谩gina no acepta tus comentarios porque 鈥淭u comentario contiene enlaces a sitios no seguros鈥濃 Ojal谩 puedan mejorar eso. Uno s贸lo quiere compartir su c贸digo.

En 鈥淎rchivos y Enlaces鈥, cuando se preciona Descargar todo. No se descargan los archivos de la clase.

<'use strict'

const http = require('http')
const server = http.createServer();

server.on('request', (req,res) => {
    if (req.method === 'POST' && req.url == "/echo"){
        let body = []
        let day, month, year;
        let birthday

        req.on('data', chunk => {
            body.push(chunk)
        })
        .on('end', () => {
            res.writeHead(200, {'Content-Type': 'text/plain'})
            body = Buffer.concat(body).toString().split(' ');
            day= body[0]
            month = body[1] - 1;
            year = body[2]
            birthday = new Date(year,month,day)
            birthday = birthday.toString();
            console.log(birthday);
            res.end(birthday)
        })
    } else {
        res.statusCode = 404
        res.end();
    }
})

server.listen(8001)
console.log('Servidor en la url http://localhost:8001');>

const http = require("http");
const server = http.createServer();

server.on("request", (req, res) => {
    if (req.method === "POST" && req.url == "/echo") {
        let body = [];

        req
            .on("data", chunk => {
                body.push(chunk);
            })
            .on("end", () => {
                res.writeHead(200, { "Content-Type": "text/plain" });
                body = Buffer.concat(body).toString();

                let day = new Date(body).getDay();
                console.log(day)
                let res_day = ["Sunday", "Monday", "Tuesday", , "Wednesday", "Thuesday", "Fryday", "Saturday"];
                console.log(res_day[day])


                res.end(res_day[day]);
            });
    } else {
        res.statusCode = 404;
        res.end();
    }
});

server.listen(8000);
console.log("Servidor en la url http://localhost:8000");
const http = require('http')
const server = http.createServer()

server.on('request', (req, res) => {
    if (req.method == 'POST' && req.url == "/echo"){
        let body = []

        req.on('data', chunk =>{
            body.push(chunk)
        })

        .on('end', () => {
            res.writeHead(200, {'Content-Type': 'text/plain'})
            body = Buffer.concat(body).toString()
            fecha = body.split(" ")

            year = fecha[0]
            month = fecha[1]
            day= fecha[2]

            birthday = new Date(year, month, day)
            weekday = birthday.getDay() // dia de la semana
            console.log(weekday)

            res.end(weekday.toString())
        })
    }else {
        res.statusCode = 404
        res.end()
    }
})

server.listen(8002)
console.log('servidor en la url http://localhost:8002')```

Mi reto

onst http = require('http')
const server = http.createServer()

const getDayFromDate = data => {
    var d = new Date(data)
    var dd = d.getDay()
    const dayNames = ["Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado", "Domingo"]
    return dayNames[dd - 1]
}

server.on('request', (req, res) => {
    if (req.method === 'POST' && req.url == '/birthday') {
        let body = []
        req
            .on('data', chunk => {
                body.push(chunk)
            })
            .on('end', () => {
                res.writeHead(200, { 'Content-Type': 'text/plan' })
                body = Buffer.concat(body).toString()
                var dayName = getDayFromDate(body)
                res.end(`Tu naciste el dia ${dayName}`)
            })
    } else {
        res.statusCode = 404
        res.end()
    }
})

server.listen(8001)
console.log('Servidor en http://localhost:8001')```

Mi solucion

const http = require("http");
const server = http.createServer();

server.on("request", (req, res) => {
  if (req.method === "POST") {
    let body = [];
    req
      .on("data", chunk => {
        body.push(chunk);
      })
      .on("end", () => {
        res.writeHead(200, { "Content-Type": "text/plain" });
        body = Buffer.concat(body).toString();
        let dateBirth = new Date(body).getDay();

        let week = [
          "Domingo",
          "Lunes",
          "Martes",
          "Mi茅rcoles",
          "Jueves",
          "Viernes",
          "S谩bado"
        ];

        dateBirth = week[dateBirth];

        res.end(`Naciste un ${dateBirth}`);
      });
  } else {
    res.statusCode = 404;
    res.end("404");
  }
});

server.listen(8001);
console.log("Servidor en la url http://localhost:8001");

Les dejo mi soluci贸n al reto, una va con los comentarios que me sirvieron para resolverlo y la otra imagen solo el c贸digo.

Sin comentarios

Con comentarios

Mi soluci贸n:

const http = require('http');
const server = http.createServer();
const weekdays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Fryday', 'Saturday']

server.on('request', (req, res) => {
    if (req.method === 'POST' && req.url == '/echo') {

        let body = [];
        req.on('data', chunk => {
            body.push(chunk)
        })
        .on('end', () => {
            res.writeHead(200, { 'Content-Type': 'text/plain' });

            let dateBday = new Date(body);

            body = Buffer.concat(body).toString();
            res.end(`You were born on an ${weekdays[dateBday.getDay()]}`);
        })
    }
    else {
        res.statusCode = 404;
        res.end();
    }
})

server.listen(8010);
console.log('Servidor en la URL http://localhost:8010');

Hola les comparto mi solucion:

const http = require('http');
const server = http.createServer();
const port = 8001;
const url = 'http://localhost:';
const weekdays =[
  'Domingo',
  'Lunes',
  'Martes',
  'Mi茅rcoles',
  'Jueves',
  'Viernes',
  'S谩bado'
]


server.on('request', (req, res) => {
	if (req.method === 'POST' && req.url === '/brithDay') {
		let body = [];
		req.on('data', chunk => {
			body.push(chunk);
		}).on('end', () => {
      res.writeHead(200, { 'Content-Type': 'text/plain' });
      let weekday = new Date (body).getDay()
			body = Buffer.concat(body).toString();
			res.end(`si naciste el ${body} naciste el dia ${weekdays[weekday]}`);
		});
	} else {
		res.statusCode = 404;
		res.end();
  }
  
});

server.listen(port);
console.log(`servidor en la url ${url}${port}`);

Mi soluci贸n al reto de la clase:

// Importamos http y creamos el servidor
const http = require('http');
const server = http.createServer();

// Funci贸n para obtener el d铆a de la semana a partir de una fecha
const getWeekDay = (date) => {
  const weekDays = [
    'Domingo',
    'Lunes',
    'Martes',
    'Mi茅rcoles',
    'Jueves',
    'Viernes',
    'S谩bado',
  ];

  return date instanceof Date && !isNaN(date)
    ? weekDays[date.getDay()]
    : 'Fecha inv谩lida';
};

// Procesamos el request
server.on('request', (req, res) => {
  if (req.method === 'POST' && req.url == '/echo') {
    let body = [];
    req
      .on('data', (chunk) => {
        body.push(chunk);
      })
      .on('end', () => {
        res.writeHead(200, { 'Content-Type': 'text/plain' });
        body = Buffer.concat(body).toString();
        // Utilizamos la funci贸n creando una instancia de Date
        body = getWeekDay(new Date(body));
        res.end(body);
      });
  } else {
    res.statusCode = 404;
    res.end();
  }
});

server.listen(8001);
console.log('Servidor en la url http://localhost:8001');

me da como cosita ense帽ar mi codigo luego de ver que los demas tienen su solucion con menos codigo, pero aqui esta XD

PD: esa formula es del 鈥楢lgoritmo de Zeller鈥, si quieren hacer pruebas y eso

const http = require("http");
const server = http.createServer();

server.on('request', (req,res)=>{
    if(req.method === 'POST' && req.url == "/echo"){
        let body = [];
        req.on("data", chunck =>{
            body.push(chunck)
        }).on("end",()=>{
            res.writeHead(200, {'content-type': 'text/plain'})

            var dayBorn = fechaNacimiento(Buffer.concat(body).toString());
            res.end(dayBorn)
        }) 
    }else{
        res.statusCode = 404
        res.end()
    }
})

server.listen(8000, ()=>{
    console.log("running in http://localhost:8000");
})

function fechaNacimiento(data){
    var parts = data.split('-');
    //var mydate = new Date(parts[2], parts[1] - 1, parts[0]);

    var year = parseInt(parts[2]); 
    var month = parseInt(parts[1]); 
    var day = parseInt(parts[0]); 

    if(month <= 2){
        month += 2
        year -= 1
    }else{
        month -= 2
    }
    var a = year % 100;
    var b = year / 100;
    var dayBorn = ( 700 +
        (month*26-2)/10 +
        day +
        a +
        a / 4 + 
        b / 4 - 
        b * 2
      ) % 7

    console.log(dayBorn)
    dayBorn = parseInt(dayBorn)
    switch(dayBorn){
        case 0: 
            dayBorn = "domingo"
            break 
        case 1: 
            dayBorn = "lunes"
            break 
        case 2: 
            dayBorn = "martes"
            break 
        case 3: 
            dayBorn = "miercoles"
            break 
        case 4: 
            dayBorn = "jueves"
            break 
        case 5: 
            dayBorn = "viernes"
            break 
        case 6: 
            dayBorn = "sabado"
            break 
    }

    console.log("dia=" + dayBorn)
    return dayBorn
}```

CHALLENGE No.1

CODE


POSTMAN

const http = require('http')
const server = http.createServer()
const dia = [
    'Domingo',
    'Lunes',
    'Martes',
    'Miercoles',
    'Jueves',
    'Viernes',
    'Sabado'
]
server.on('request', (req, res) => {
    if (req.method === 'POST' && req.url == '/time') {
        let fecha = []
        req.on('data', (chunk) => {
            fecha.push(chunk)
        })
        req.on('end', () => {

            res.writeHead(200, { 'content-type': 'text/plain' })
            fecha = Buffer.concat(fecha).toString()
            const cumple = new Date(fecha);
            let diaCumple

            if (!isNaN(cumple) && typeof cumple === 'object') {
                diaCumple = dia[cumple.getDay()]
            } else {
                diaCumple = 'Fecha inexistente'
            }
            res.end(diaCumple)
        })
    } else {
        res.statusCode = 404
        res.end()
    }
})

server.listen(8080)

console.log('servidor en linea');
const http = require("http")
const server = http.createServer();

const days = ["Domingo","Lunes","Martes","Mi茅rcoles","Jueves","Viernes","S谩bado"]
function DiaNacimiento(date){
    let fecha = new Date(date)
    let dia = fecha.getDate()
    return ` El d铆a de tu nacimiento fue: ${days[dia]}`
}
server.on("request",(req,res)=>{
    if(req.method =="POST" && req.url=="/edad"){
        let body = [];
        req
            .on("data", chunk =>{
            body.push(chunk)
        })
            .on("end",()=>{
                res.writeHead(200,{"Content-Type":"text/plain" })
                body = Buffer.concat(body).toString()
                let nacimiento = DiaNacimiento(body)
                res.end(nacimiento)
            })
    }else{
        res.statusCode = 404;
        res.end()
    }
})

server.listen(8000)
console.log("Sevidor en http://localhost/8000")

Mi soluci贸n utilizando Date();

// Crear un servidor que reciba tu fecha de cumplea帽os y devuelva el d铆a de la semana que nacieron.

const http = require('http');
const server = http.createServer();

server.on('request', (req, res) => {
    if (req.method === 'POST' && req.url == '/birthday') {
        let body = [];

        req.on('data', chunk => {
                body.push(chunk);
            })
            .on('end', () => {
                res.writeHeader(200, { 'Content-Type': 'text/plain' });
                body = Buffer.concat(body).toString();
                res.end(`Naciste un: ${getDayDate(body)}`);
            })
    } else {
        res.statusCode = 404;
        res.end();
    }
});

function getDayDate(data) {
    let date = new Date(data);
    let birthday = date.getUTCDay();
    switch (birthday) {
        case 0:
            birthday = 'Domingo';
            break;
        case 1:
            birthday = 'Lunes';
            break;
        case 2:
            birthday = 'Martes';
            break;
        case 3:
            birthday = 'Miercoles';
            break;
        case 4:
            birthday = 'Jueves';
            break;
        case 5:
            birthday = 'Viernes';
            break;
        case 6:
            birthday = 'Sabado';
            break;
        default:
            birthday = 'No es un d铆a de la semana';
            break;
    }
    return birthday;
}

server.listen(3001);
console.log('Servidor local en la url http://localhost:3001');

Aqui mi implementacion.
Lo ideal seria evaluar formato de entrada entre otras cosas (Mejorara en un futuro)

const daysOfWeek = ["Domingo", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado"];

function getDate(dateIn){
    let date = new Date(dateIn);
    return date.getUTCDay();
}

const http = require("http");

const host = "127.0.0.1";

const port = 3000;

const server = http.createServer();

server.on("request", (req,res) =>{
    if (req.method == "POST" && req.url == "/birth"){
        let body = [];

        req.on("data",chunk=>{
            body.push(chunk);
        }).on("end", () =>{
            res.writeHead(200, {"Content-type": "text/plain"});
            body = Buffer.concat(body).toString();
            let day = daysOfWeek[getDate(body)];
            res.end("Naciste un "+day);
        })
    } else{
        res.statusCode = 404;
        res.end();
    }
})


server.listen(port, host, () =>{
    console.log(`Server runing at http://${host}:${port}/`);
})

NOTA: Importante validar que la fecha sea v谩lida.

const http = require('http');
const server = http.createServer();
const moment = require('moment');


server.on('request', (req, res) => {
    if (req.method === 'POST' && req.url == '/echo') {
        let fecha = [];
        let respuesta = '';

        req.on('data', chunk => {
            fecha.push(chunk);
        }).on('end', () => {
            if(!moment(fecha).isValid())
            {
                respuesta = 'No es una fecha valida';
            }else{
                respuesta = moment(fecha).locale('es').format('dddd');
            }
            res.writeHead(200, { 'Content-Type': 'text/plain' })
            res.end(respuesta);
        })
    }
    else {
        res.statusCode = 404;
        res.end();
    }
});

server.listen(8001);
console.log('Servidor ejecutandose en el puerto: 8001')
const http = require('http');
const server = http.createServer();
const days = ['Domingo', 'Lunes', 'Martes', 'Mi茅rcoles', 'Jueves', 'Viernes', 'S谩bado'];

server.on('request', (req, res) => {
	

	if (req.method == 'POST' && req.url == '/echo') {
		let body = [];

		req.on('data', chunk => {	// Se manda llamar cuando recibimos datos
			// body.push(chunk);		// Los chunks son peque帽as partes de datos
			const weekDay = new Date(chunk).getDay();
			body.push(days[weekDay])	// El dato a enviar ser谩 del tipo "August 29 1997"
		})
		.on('end', () => {
			res.writeHead(200, {'Content-Type': 'text/plain'});
			//body = Buffer.concat(body).toString();
			res.end(`Naciste un ${body}`);
		});
	} else {
		res.statusCode = 404;
		res.end();
	}
});

server.listen(8001);
console.log('Servidor en la url http://localhost:8001');

Listo!

const http = require("http");
const server = http.createServer();
const dias = ["Lunes", "Martes", "Miercoles", "Jueves", "Viernes"];

server.on("request", (req, res) => {
  if (req.method === "POST" && req.url == "/cumple") {
    let body = [];
    req
      .on("data", (chunk) => {
        body.push(chunk);
      })
      .on("end", () => {
        res.writeHead(200, { "Content-Type": "text/plain" });
        body = Buffer.concat(body).toString();
        var fecha = body.split("/", 3);
        const a = `Naciste un: ${
          dias[new Date(fecha[0], fecha[1], fecha[2]).getDay()]
        }`;
        res.end(a);
      });
  } else {
    res.statusCode = 404;
    res.end();
  }
});

server.listen(8001);

Me cost贸 un poco y a煤n no s茅 como podr铆a hacer para validar que sea el formato JSON el que se env铆e (para que se convierta con el m茅todo JSON.parse() ), supongo que habr铆a que manejar errores para que no se crashee el programa鈥

const http = require('http')
const server = http.createServer()

server.on('request', (req, res) => {
  if (req.method === 'POST' && req.url == '/echo') {
    let data = []
    const days = ['Domingo', 'Lunes', 'Martes',
      'Miercoles', 'Jueves', 'Viernes', 'S谩bado'] // domingo es el primer d铆a seg煤n MDN

    req
      .on('data', chunk => {
        data.push((chunk))
        data = Buffer.concat(data).toString() //convierte en String
        data = JSON.parse(data)//convierte a JSON
      })
      .on('end', () => {
        let { day, month, year } = data //desestructura el JSON
        date = new Date(`${month}/${day}/${year}`) //crea una fecha a partir de los datos desestructurados
        if (date == 'Invalid Date') { // si la fecha est谩 mal escrita
          res.writeHead(400, { 'Content-type': 'text/plain' }) //env铆a Bad Request
          res.end('la fecha que ingresaste no es v谩lida. Revisa que los datos sean correctos')
          console.log('Datos inv谩lidos')
        } else {
          formatDate = `${day}/${month}/${year}` // formatea a los datos para devolver DD/MM/YYYY
          res.writeHead(200, { 'Content-type': 'text/plain' })
          res.end(`Naciste el ${formatDate} un d铆a ${days[date.getDay()]}`) // el m茅todo getDay() devuelve un n煤mero entre 0-6 (7 d铆as)
          console.log('Todo bien')
        }
      })
  } else {
    res.statusCode = 404
    res.end('Error 404: Not Found')
  }
})

server.listen(8000)
console.log('Servidor escuchando en http://localhost:8000')

Datos enviados:

{
	"month": 10,
	"day": 15,
	"year": 1995
}

Recibido:

Naciste el 15/10/1995 un d铆a Domingo
Envio: yyyy/mm/dd.

const http = require('http');
const server = http.createServer();

server.on('request', (req, res) => {
    if (req.method === 'POST' && req.url === '/echo') {
        let body = [];

        req
            .on("data", chunk => {
                body.push(chunk);
            })
            .on("end", () => {
                res.writeHead(200, { "Content-Type": "text/plain" });
                body = Buffer.concat(body).toString();
                let days = ['Domingo', 'Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes', 'Sabado'];
                let date = new Date(body);
                let day = date.getDay();
                res.end(`Naciste el d铆a ${day} - ${days[day]}, segun la fecha ${date}`);
            });
    } else {
        res.statusCode = 404;
        res.end();
    }
});

server.listen(8001);
console.log('Servidor en la url http://localhost:8001');

Mi aporte de 3 soluciones para el reto.

  1. Enviar la fecha por la URL
const http = require('http')
const server = http.createServer()

server.on('request', (req, res) => {
  if (req.method === 'POST') {
    res.writeHead(200, { 'Content-Type': 'text/plain' })
    const url = req.url
    const dateBody = url.substring(1, url.length).split('-')
    const birthday = getDate(dateBody[2], dateBody[1], dateBody[0])
    res.end(`You were born on ${getWeekday(birthday.getDay())}`)
  } else {
    res.statusCode = 404
    res.end()
  }
})

function getDate(year, month, day) {
  return new Date(year, month - 1, day)
}

function getWeekday(dayNumber) {
  const weekday = [
    'Sunday',
    'Monday',
    'Tuesday',
    'Wednesday',
    'Thursday',
    'Friday',
    'Saturday',
  ]
  return weekday[dayNumber]
}

server.listen(3001)

  1. Enviar la fecha por raw
const http = require('http')
const server = http.createServer()

server.on('request', (req, res) => {
  if (req.method === 'POST' && req.url == "/birthday") {
    let dateBody = []
    req
      .on("data", chunk => {
        dateBody.push(chunk)
      })
      .on("end", () => {
        res.writeHead(200, { 'Content-Type': 'text/plain' })
        dateBody = Buffer.concat(dateBody).toString().split('-')
        const birthday = getDate(dateBody[2], dateBody[1], dateBody[0])
        res.end(`You were born on ${getWeekday(birthday.getDay())}`)
      })
  } else {
    res.statusCode = 404
    res.end()
  }
})

function getDate(year, month, day) {
  return new Date(year, month - 1, day)
}

function getWeekday(dayNumber) {
  const weekday = [
    'Sunday',
    'Monday',
    'Tuesday',
    'Wednesday',
    'Thursday',
    'Friday',
    'Saturday',
  ]
  return weekday[dayNumber]
}

server.listen(3001)

  1. Usando Moment.js
const http = require('http')
const server = http.createServer()
const moment = require('moment')

server.on('request', (req, res) => {
  if (req.method === 'POST' && req.url == '/birthday') {
    let dateBody = []
    req
      .on('data', chunk => {
        dateBody.push(chunk)
      })
      .on('end', () => {
        res.writeHead(200, { 'Content-Type': 'text/plain' })
        dateBody = Buffer.concat(dateBody).toString()
        let birthday = moment(dateBody, 'DD/MM/YYYY')
        let day = birthday.format('dddd')
        res.end(`You were born on ${day}`)
      })
  } else {
    res.statusCode = 404
    res.end()
  }
})

server.listen(3001)

Excelente clase, y muy bien por darnos retos, eso nos ayuda a confirmar los conocimientos de Node.js que vamos adquiriendo.
Esta es mi soluici贸n:

En lugar de usar Postman, utilizo una extensi贸n de VSCode llamada ThunderClient que funciona de una manera similar pero sin la necesidad de cambiar de contexto.馃榿

As铆 qued贸 mi c贸digo despu茅s de resolver el reto

const moment = require('moment');
const http = require('http');
const server = http.createServer();

server.on('request', (req, res) =>{
    if (req.method === 'POST' && req.url == '/echo'){
        let body = [];


        req.on('data', chunk => {
            body.push(chunk);
        })
        .on('end', () =>{
            res.writeHead(200, {'Content-Type': 'text/plain'});
            body = Buffer.concat(body).toString();

            let fecha = moment(body);
            res.end(fecha.format('dddd')); // el formato 'dddd' es para que solo muestre el dia en texto.
            
        
        })
    } else {
        res.statusCode = 404;
        res.end();
    }
});


server.listen(7001);

En javascript los string heredan de los event emitter, es decir un readble string o string tambi茅n tiene eventos

El objeto request es un readble string

驴Qu茅 es el objeto request y que se puede hacer con el?

Aqu铆 mi soluci贸n al reto:

Mi soluci贸n:

.on('end', () => {
      res.writeHead(200, {'Content-Type': 'text/plain'})
      body = Buffer.concat(body).toString()
      
      const myBirthday = new Date(body)
      const getDay = myBirthday.getDay() - 1
      const days = ['Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes', 'Sabado', 'Domingo']
      res.end(days[getDay])
    })
   
  } else {
    res.statusCode = 404
    res.end()
  }

Para no tener problemas, solo puse
res.end(body.toString());

Aqu铆 mi respuesta al reto:

const http = require("http");
const server = http.createServer();

let diasSemana =['Domingo','Lunes','Martes','Miercoles','Jueves','Viernes','Sabado'];

server.on("request", (req, res) => {
  if (req.method == "POST" && req.url == "/echo") {
    let body = [];

    req
      .on("data", (chunk) => {
        body.push(chunk);
      })
      .on("end", () => {
        res.writeHead(200, { "Content-Type": "text/plain" });
        body = Buffer.concat(body).toString();
        const dayWeek = new Date(body);
        let day = dayWeek.getDay();
        res.write('Indique su fecha de nacimiento en el siguiente formato MM/DD/AAAA:\n');
        res.end('Naciste el d铆a '+diasSemana[day]);
      });
  } else {
    res.statusCode = 404;
    res.end("Lo lamento no encontre la pagina que buscas");
  }
});

server.listen(8002);

const moment = require("moment");
...

body = moment(Buffer.concat(body).toString()).format("dddd");
res.end(body);

Estuve dandole un rato, tambien estuve viendo los diferentes codigos en los comentarios. Aca mi codigo:

const http = require("http");
const server = http.createServer();
const Semana = [
  "Domingo",
  "Lunes",
  "Martes",
  "Miercoles",
  "Jueves",
  "Viernes",
  "Sabado",
];

server.on("request", (req, res) => {
  if (req.method === "POST" && req.url === "/echo") {
    let body = [];
    req
      .on("data", (chunk) => {
        body.push(chunk);
      })
      .on("end", () => {
        const date = new Date(body.toString());
        let diaSemana = Semana[date.getDay()];
        res.writeHead(200, { "Content-type": "text/plain" });
        res.end(`El dia de tu nacimiento fue ${diaSemana}`);
      });
  } else {
    res.statusCode = 404;
    res.end("Hubo un error");
  }
});

server.listen(8002);
console.log("Servidor corriendo en el puerto 8002");
const http = require('http');
const  calculateDate  = require('./functions');
const server = http.createServer();

server.on('request', (req,res)=> {
  if(req.method === 'POST' && req.url == "/echo"){
    let body = [];
    req.on("data", chunk => {
      body.push(chunk);
    })
    .on("end",() => {
      res.writeHead(200,('Content-Type', 'application/json'))
      body = Buffer.concat(body).toString();
      const response = JSON.parse(body);
      const arrDate = response.birthday.split('/');
      const resultDay = calculateDate(parseInt(arrDate[0]),parseInt(arrDate[1]),parseInt(arrDate[2]));
      res.end(JSON.stringify({'day':resultDay}));
    });
  }else{
    res.statusCode=404;
    res.end();
  }
  
})
server.listen(8002);

Mi funci贸n para calcular el d铆a : ALGORITMO DE ZELLER

const weekdayNames = {
  1:'lunes',
  2:'Martes',
  3:'Mi茅rcoles',
  4:'Jueves',
  5:'Viernes',
  6:'S谩bado',
  7:'Domingo',
}
function calculateDate (dd,mm,aaaa){
  const day = parseInt((14 - mm) / 12);
  const year = aaaa - day;
  const month = parseInt(mm + (12 * day) - 2);
  const dayResult = parseInt(dd + year + parseInt(year/4) - parseInt(year/100) + parseInt(year/400)+((31*month) / 12)) % 7;
return weekdayNames[dayResult];
}
module.exports = calculateDate;
```

Les comparto mi soluci贸n con date-fns:

const http = require('http')
const server = http.createServer()
const dateFns = require('date-fns')

server.on('request', (req, res) => {
  if (req.method === 'POST' && req.url === '/birthday') {
    const data = []

    req
      .on('data', chunk => {
        data.push(chunk)
      })
      .on('end', () => {
        const [year, month, day] = Buffer.concat(data).toString().split('-')

        try {
          if (month === 0)
            throw new Error()

          const birthday = dateFns.format(
            dateFns.subMonths(new Date(year, month, day), 1),
            'yyyy/MM/dd'
          )

          res.writeHead(200, { 'Content-Type': 'application/json' })
          res.end(
            JSON.stringify({
              error: false,
              message: `Your birthday is on ${birthday}`
            })
          )
        } catch (e) {
          res.writeHead(400, { 'Content-Type': 'application/json' })
          res.end(
            JSON.stringify({
              error: true,
              message: 'Wrong date format, try: "yyyy-MM-dd"'
            })
          )
        }
      })
  }
})

server.listen(1996, () => {
  console.log('Server running on port 1996')
})

As铆 me qued贸 con Luxon

const http = require('http');
const moment = require('moment');
const server = http.createServer();

// Send post request with birthday date (dd-mm-yyyy) and return day name

server.on('request', (req, res) => {
    // res.statusCode = 200;
    // res.setHeader('Content-Type', 'text/plain');

    if( req.method === 'POST' && req.url === '/echo'){

        let body = [];

        req.on('data', chunk => { // on data -> when recieve data
            body.push(chunk)
        })
        .on('end', () => {
            res.writeHead(200, { 'Content-Type': 'text/plain'})
            body = Buffer.concat(body).toString(); // body to string
            fecha = moment(body, "DD-MM-YYY").format('dddd');
            res.end(fecha);
        })
    } else {
        res.statusCode = 404;
        res.end
    }
})

server.listen(8001);


Yo acabo de hacer un proyecto usando este concepto usando handlebars

https://mysql-nodejs-crud.herokuapp.com/

tambien pueden seguirme en github si gustan:

https://github.com/who-Is-Beto

Con la api Date de EcmaScript

Usando moment js

const http = require('http')
const server = http.createServer()
const moment = require('moment')

server.on('request', (req, res) => {
  if (req.method === 'POST' && req.url == "/echo") {
    let body = []
    req.on('data', chunk => {
      body.push(chunk)
    })
    .on('end', () => {
      res.writeHead(200, {'Content-Type': 'text/plain'})
      body = Buffer.concat(body).toString()
      body = dateToWeekday(body)
      res.end(body)
    })
  } else {
    res.statusCode = 404
    res.end()
  }
})

function dateToWeekday(dateString) {
  if (moment(dateString).isValid()) {
    return moment(dateString).format('dddd') 
  } else {
    return 'Error en el formato de la fecha'
  }  
}

server.listen(8001)
console.log('Servidor en la url http....localhost:8001');

Resuelto el challenge con el m贸dulo moment!!

Logre desarrollar el codigo de la clase, pero no se como hacer el reto 馃槮 alguien me podria dar una pista, lei en los comentarias que estan usando la clase Date y la funcion getDay()

dejo el codigo de la clase por si a alguien le sirve

const http = require('http');
const server = http.createServer();

server.on('request', (req, res) => {
    if(req.method === 'POST' && req.url == '/echo'){
        let body = []

        req
            .on('data', chunk => {
                body.push(chunk)
            })
            .on('end', () => {
                res.writeHead(200, {'Content-Type': 'text/plain'})
                body = Buffer.concat(body).toString()
                res.end(body)
            })
    }
    else{
        res.statusCode = 404
        res.end()
    }
});

server.listen(8000);
console.log('Servidor en la url https://localhost:8000')
const http =   require ('http');

const server = http.createServer();

server.on('request',(req, res) => {
    if (req.method === "POST" && req.url == "/dia-de-cumple") {
        let body = [];
        req.on('data', (fecha)=> {
            let cumple = new Date(fecha);
            const diaSemana = ['Domingo', 'Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes', 'Sabado'];
            let diaCumple = `Dia de cumple es: ${diaSemana[cumple.getUTCDay()]}`;
            res.end(diaCumple);
        })
    } else {
        res.statusCode = 404;
        res.end();
    }
})

server.listen(8003);
const moment = require('moment');

calculateDay({
    year: 1992,
    month: 13,
    day: 23
}
);

function calculateDay(date) {
    const { year, month, day } = date;
    const days = ['Domingo', 'Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes', 'Sabado'];
    const dayInt = moment(`${year}-${month}-${day}`).day();

    if (isNaN(dayInt)) {
        return 'Invalid Date';
    }

    return days[dayInt];
}

Enviando un JSON con la fecha de cumplea帽os

const http = require('http');
const server = http.createServer();

server.on('request', (request, response) => {
    if(request.method === 'POST' && request.url == '/echo'){
        let body = [];

        request
            .on("data", chunk => {
                body.push(chunk);
            })
            .on("end", () => {
                // OJO en postman mandamos un objeto JSON de la siguiente forma: {"mes" : "08", "dia" : 27, "a帽o" : 1992}
                response.writeHead(200, { "Content-Type": "text/plain" });
                let fechaCumplea帽os = JSON.parse(Buffer.concat(body).toString());// Aqu铆 parseamos el String del body a JSON
                response.end(fechaCumplea帽os.dia.toString());// Del objeto fechaCumplea帽os regresamos su atributo dia
            });
    }
    else{
        response.statusCode = 404;
        response.end();
    }
});

server.listen(8001);
console.log('Servidor en la url http://localhost:8001');

yeip

Aunque por ahora solo podr铆a usar los formatos YYYYMMDD y YYYY-MM-DD al escribir en Postman

const http = require('http');
const moment = require('moment');
const server = http.createServer(); // se crea servidor

server.on('request', (req, res) => {
    if (req.method === 'POST' && req.url == "/echo") {
        let body = [];

        req
            .on("data", chunk => {
                body.push(chunk);
            })
            .on("end", () => {
                res.writeHead(200, { 'Content-Type': 'text/plain' });
                body = Buffer.concat(body).toString();
                console.log(body);
                let fechaNacimiento = body;
                res.end(moment(fechaNacimiento).format('dddd'));
            });
    } else {
        res.statusCode = 404;
        res.end();
    }

});


server.on('request', (req, res)=>{
    if (req.method === 'POST' && req.url == '/echo'){
        let body = [];
        req.on('data', chunk => {
            body.push(chunk);
        })
        .on('end', () =>{
            res.writeHead(200, {'Content-Type': 'text/plain'});
            let DayOfWeek = new Array(7);
            DayOfWeek[0]="Domingo";
            DayOfWeek[1]="Lunes";
            DayOfWeek[2]="Martes";
            DayOfWeek[3]="Miercoles";
            DayOfWeek[4]="Jueves";
            DayOfWeek[5]="Viernes";
            DayOfWeek[6]="Sabado";
            let day =  DayOfWeek[new Date(Buffer.concat(body).toString()).getDay()];
            
            res.end(day.toString());
        })
    }else {
        res.statusCode = 404;
        res.end();
    }

})

server.listen(8001);

Soluci贸n al reto seg煤n lo que entend铆

const http = require('http');
const server = http.createServer();

class calculateDate {
    constructor(birthDate){
        this.data = birthDate.split('/');
    }
    paramA(data){
        if( data >= 2000 && data <= 2099 ){
            return 0;
        }else if( data >= 2100 && data <= 2199 ){
            return -2;
        }else if(data >= 2200 && data <= 2299){
            return -4;
        }else if( data >= 1900 && data <= 1999 ){
            return 1;
        }else if( data >= 1800 && data <= 1899 ){
            return 3;
        }else if( data >= 1700 && data <= 1799 ){
            return 5;
        }
    }
    paramB(data){
        data = data.toString();
        const lastTwoDigits = data[2] + data[3];
        const calculateParam = parseInt(lastTwoDigits);
        return Math.floor(calculateParam + calculateParam * 1 / 4);
    }
    paramC(data){
        data = parseInt(data);
        const yearBis = data % 4;
        if(yearBis === 0){
            return -1;
        }
        return 0;
    }
    paramD(data)
    {
        if( data == 'Enero' || data == '1' ){
            return 6;
        }else if( data == 'Febrero' || data == '2' ){
            return 2;
        }else if( data == 'Marzo' || data == '3' ){
            return 2;   
        }else if( data == 'Abril' || data == '4' ){
            return 5;
        }else if( data == 'Mayo' || data == '5' ){
            return 0;
        }else if( data == 'Junio' || data == '6' ){
            return 3;
        }else if( data == 'Julio' || data == '7' ){
            return 5;
        }else if( data == 'Agosto' || data == '8' ){
            return 1;  
        }else if( data == 'Septiembre' || data == '9' ){
            return 4;
        }else if( data == 'Octubre' || data == '10' ){
            return 6;           
        }else if( data == 'Noviembre' || data == '11' ){
            return 2;
        }else if( data == 'Diciembre' || data == '12' ){
            return 4;
        }
    }
    returnNameDay(data){
        switch (data) {
            case 0:
                return 'Domingo';
            case 1:
                return 'Lunes';
            case 2:
                return 'Martes';
            case 3:
                return 'Miercoles';
            case 4:
                return 'Jueves';
            case 5:
                return 'Viernes';
            case 6:
                return 'Sabado';
            default:
                break;
        }
    }
    calculateDate(){
        const data = this.data;
        const year = parseInt(data[2]);
        const month = data[1];
        const day = parseInt(data[0]);
        let sumResult = this.paramA(year) + this.paramB(year) + this.paramC(year) + this.paramD(month) + day;
        while( sumResult > 7 ){
            sumResult = sumResult - 7;
        }
        const nameDay = this.returnNameDay(sumResult)
        return nameDay;
    };
}



server.on('request', (req,res)=>{
    if( req.method === 'POST' && req.url == '/birth' ){
        let body = [];
        req.on('data', chunk =>{
            body.push(chunk);
        })
        .on('end', ()=>{
            res.writeHead(200, {'content-type': 'text/plain'});
            body = Buffer.concat(body).toString();
            //console.log(body);
            const dayOfDate = new calculateDate(body);
            const finalResult = `Ese dia fue ${dayOfDate.calculateDate()}`
            res.end(finalResult);
        });
    }else{
        res.statusCode = 404;
        res.end();
    }
});

server.listen(8002);
console.log('Servidor escuchando en 8002'); 
<code> 
const http = require('http')

const server = http.createServer()


server.on('request',(req,res) => {
    if(req.method === 'POST' && req.url ==='/echo' ){
        let body = []
        req.on('data', chunk => {
            body.push(chunk)
        })
        .on('end',() =>{
            res.writeHead(200,{'Content-type': 'text/plain'})
            body = Buffer.concat(body).toString()
            let dateArray = body.split('-')
            const finalDate = `Your born the day ${dateArray[0]} `
            res.end(finalDate)
        })
    }else{
        res.statusCode = 404
        res.end()
    }
})

server.listen(8001)


</code>

Para el reto:

const http = require('http');
const server = http.createServer();
const getDay = (dateInput) =>{
    let date = new Date(`${dateInput}`);
    const days = ['Sunday','Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
    return days[date.getDay()];
}

server.on('request', (req, res)=>{
    if(req.method === "POST" && req.url== "/echo"){
        let body = [];
        req.on('data', chunk =>{
            body.push(chunk);
        })
        .on('end', ()=>{
            res.writeHead(200, {"Content-Type": "text/plain"})
            body = Buffer.concat(body).toString()
            res.end(`${getDay(body)}`);
        })

    }else{
        res.statusCode = 404;
        res.end();
    }

});
server.listen(8001);

Propuse dos soluciones: Una con un arreglo (para tener listos los d铆as de la semana; la otra, con Switch Case.

const http = require("http");
const server = http.createServer();

server.on("request", (req, res) => {
  if ((req.method = "POST" && req.url == "/cumple")) {
    let body = [];

    req
      .on("data", (chunk) => {
        body.push(chunk);
      })
      .on("end", () => {
        res.writeHead(200, { "Content-Type": "text/plain" });
        body = Buffer.concat(body).toString();
       
        let fecha = new Date(body);
        let day = fecha.getDay(); //Retorna el n煤mero del d铆a. Si es 0 es domingo.
        
        let dayOfWeek = ['Domingo', 'Lunes', 'Martes', 'Mi茅rcoles', 'Jueves',  'Viernes', 'S谩bado']; 

        let diaSemana;
        switch (day) {
          case 0:
            diaSemana = "Domingo";
            break;
          case 1:
            diaSemana = "Lunes";
            break;
          case 2:
            diaSemana = "Martes";
            break;
          case 3:
            diaSemana = "Mi茅rcoles";
            break;
          case 4:
            diaSemana = "Jueves";
            break;
          case 5:
            diaSemana = "Viernes";
          case 6:
            diaSemana = "S谩bado";
            break;
        }

        res.end(`Tu d铆a de nacimiento fue: ${diaSemana} // ${dayOfWeek[day]}`);
      });
  } else {
    res.statusCode = 404;
    res.end();
  }
});

server.listen(8001);
console.log("Servidor en la url http ://localhost:8001");

PD. Le tuve que agregar un espacio despu茅s de htttp, porque Platzi lo detecta como enlace a sitio no seguro.

// Importamos el m贸dulo de http para crear el servidor web
const http = require('http');
// Creamos el servidor
const server = http.createServer();
// Definimos el puerto
const port = 8001;
// Recibimos las solicitudes con el evento "request"
// Usamos dos parametros "req" para gestionar la solicitud recibida y  "res" para definir la respusta que enviar谩 el servidor
server.on('request', (req, res) => {
    // Evaluamos que la solicitud sea de tipo POST y que la url sea /echo 
    if (req.method === 'POST' && req.url === '/echo') {
        // definimos la variable body para recibir los datos enviados en la solicitud
        let body = [];
        // recibimos los datos y los dividimos en "chucks"
        req.on('data', chuck => {
            body.push(chuck);
        })
        // cuando termina de recibir los datos 
        .on('end', () => {
            // enviamos la respuesta positiva en texto plano
            res.writeHead(200, {'Content-Type' : 'text/plain'});
            // pasamos los datos en stream a tipo string utilizando el Buffer
            body = Buffer.concat(body).toString();
            // enviamos los datos recibidos como respuesta
            res.end(`Respuesta del servidor: ${body}`);
        });
    // si no recibimos un POST
    } else {
        // definimos el c贸digo de respuesta en 404 
        res.statusCode = 404;
        // cerramos la peticion
        res.end();
    }
});
// Asignamos el puerto en donde estara "escuchando" el servidor
server.listen(port);
// Mensaje en consola
console.log(`Servidor activo en el puerto ${port}`);

Tengo un error: alguien sabe que puede ser?

Calcula el d铆a de la semana sin moment.js.

const http = require("http");

const server = http.createServer();

const calculateDate = (inputDate = "Oct 02, 1994") => {
  const days = {
    0: "Domingo",
    1: "Lunes",
    2: "Martes",
    3: "Miercoles",
    4: "Jueves",
    5: "Viernes",
    6: "Sabado",
  };
  const date = new Date(inputDate);
  const day = date.getDay();
  return days[day];
};

server.on("request", (req, res) => {
  const { method, url } = req;
  console.log(`Nueva request a url ${url} con metodo ${method}`);
  if (method === "POST" && url === "/calculate") {
    const body = [];
    req.on("data", (chunk) => {
      body.push(chunk);
    });
    req.on("end", () => {
      const parsedBody = Buffer.concat(body).toString();
      console.log("Body", parsedBody);
      res.writeHead(200, { "Content-Type": "text/plain" });
      const response = `Hola, naciste el d铆a  ${calculateDate(
        parsedBody
      )} de acuerdo con tu fecha de cumplea帽os que es ${parsedBody}`;
      res.write(response);
      res.end();
    });
  } else {
    res.statusCode = 404;
    res.end();
  }
});

server.listen(8001);

console.log("Escuchando en el puerto 8001");

Hola, les comparto mi codigo, en este caso use la libreria datejs para poder obtener el dia facilmente, y poder mostrar el dia como un string mediante un array

const http = require('http');
const date = require('datejs');
const server = http.createServer();


server.on('request', (req, res) => {
   if (req.method === 'POST' && req.url == '/echo') {
      let  body = [];
      req.on('data', chunk => {
         body.push(chunk);
      })
      req.on('end', () => {
         let days = ["lunes","martes","miercoles","jueves","viernes","sabado","domingo"];
         
         /*鈫 Haciendo uso de la lireria "datejs" para obtener el dia de forma sencilla sin importart el a帽o*/
         dateProvided = Buffer.concat(body).toString();
         dayNumber = Date.parse(dateProvided).getDay();
         dayOfBirth = days[dayNumber-1];
         
         res.writeHead(200,{'Content-Type': 'text/plain'});
         res.end(dayOfBirth);
      })

   } else {
      res.statusCode = 404;
      res.end();
   }


})

server.listen(8001);
console.log('Servidor ejecutandose en localhost:8001');

Entrada: dd/mm/aaaa por ejemplo 23/09/1998
Salida: Mi茅rcoles

const http = require("http");
const server = http.createServer();

server.on("request", (req, res) => {
  if (req.method === "POST" && req.url == "/echo") {
    let body = [];
    const days = [
      "Domingo",
      "Lunes",
      "Martes",
      "Mi茅rcoles",
      "Jueves",
      "Viernes",
      "S谩bado",
    ];

    req
      .on("data", (chunk) => {
        body.push(chunk);
      })
      .on("end", () => {
        res.writeHead(200, { "Content-Type": "text/plain" });
        body = Buffer.concat(body).toString().split("/");

        const day = body[0];
        const month = body[1]-1;
        const year = body[2];
        const birthdate = new Date(year, month, day);

        res.end(days[birthdate.getDay().toString()]);
      });
  } else {
    res.statusCode = 404;
    res.end();
  }
});

server.listen(8001);

Reto completado, recibe los datos en formato JSON.
ej:

{
    "day": 21,
    "month": 6,
    "year": 2005
}

馃挆馃挏

Use el modulo momment

const http = require("http");
const server = http.createServer();
const moment = require("moment");

server.on("request", (req, res) => {
    if (req.method === "POST" && req.url === "/cumple") {
        let body = [];

        req.on("data", chunk => {
            body.push(chunk);
        }).on("end", () => {
            res.writeHead(200, { "Content-Type": "text/plain" })
            body = Buffer.concat(body).toString();
            let now = moment(`${body}`, "DD-MM-YYYY");
            res.end(now.format("dddd"));
        })
    } else {
        res.statusCode = 404;
        res.end();
    }
});

server.listen(3000, () => {
    console.log("Servidor en el puerto 3000");
});

Les comparto mi solucion, apoyada de la solucion del compa帽ero Ojeda ^^

Aqui les dejo mi soluc贸n al desafio!

![](https://carbon.now.sh/?bg=rgba(171%2C 184%2C 195%2C 1)&t=seti&wt=none&l=javascript&ds=true&dsyoff=20px&dsblur=68px&wc=true&wa=true&pv=56px&ph=56px&ln=false&fl=1&fm=Hack&fs=14px&lh=133%&si=false&es=2x&wm=false&code=const%20http%20%3D%20require(%22http%22)%3B%0Aconst%20server%20%3D%20http.createServer()%3B%0A%0Aserver.on(%22request%22%2C%20(req%2C%20res)%20%3D%3E%20%7B%0A%20%20if%20(req.method%20%3D%3D%3D%20%22POST%22%20%26%26%20req.url%20%3D%3D%3D%20%22%2Fecho%22)%20%7B%0A%20%20%20%20let%20body%20%3D%20%5B%5D%3B%0A%0A%20%20%20%20req%0A%20%20%20%20%20%20.on(%22data%22%2C%20(chunk)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20body.push(chunk)%3B%0A%20%20%20%20%20%20%7D)%250A%2520%2520%2520%2520%2520%2520.on(%2522end%2522%252C%2520()%2520%253D%253E%2520%257B%250A%2520%2520%2520%2520%2520%2520%2520%2520res.writeHead(200%252C%2520%257B%2520%2522Content-Type%2522%253A%2520%2522text%252Fplain%2522%2520%257D)%253B%250A%2520%2520%2520%2520%2520%2520%2520%2520body%2520%253D%2520Buffer.concat(body).toString().split(%2522%252F%2522)%253B%250A%250A%2520%2520%2520%2520%2520%2520%2520%2520const%2520date%2520%253D%2520new%2520Date(%2560%2524%257Bbody%255B2%255D%257D-%2524%257Bbody%255B1%255D%257D-%2524%257Bbody%255B0%255D%257D%252000%253A00%253A00%2560)%253B%250A%250A%2520%2520%2520%2520%2520%2520%2520%2520const%2520dayOfWeek%2520%253D%2520date.getDay()%253B%250A%250A%2520%2520%2520%2520%2520%2520%2520%2520let%2520dayNames%2520%253D%2520%255B%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2522Domingo%2522%252C%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2522Lunes%2522%252C%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2522Martes%2522%252C%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2522Miercoles%2522%252C%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2522Jueves%2522%252C%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2522Viernes%2522%252C%250A%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520%2522Sabado%2522%252C%250A%2520%2520%2520%2520%2520%2520%2520%2520%255D%253B%250A%250A%2520%2520%2520%2520%2520%2520%2520%2520res.end(dayNames%255BdayOfWeek%255D)%253B%250A%2520%2520%2520%2520%2520%2520%257D)%253B%250A%2520%2520%257D%2520else%2520%257B%250A%2520%2520%2520%2520res.statusCode%2520%253D%2520404%253B%250A%2520%2520%2520%2520res.end()%253B%250A%2520%2520%257D%250A%257D)%253B%250A%250Aserver.listen(3001)%253B%250Aconsole.log(%2522Server%2520on%2520port%25203001%2522)%253B)

Buena clase

Mi soluci贸n. Nac铆 un d铆a mi茅rcoles , revis茅 y es verdad.
Puedes utilizar inputs como: YYYY-MM-DD, YYYY|MM|DD, YYYY/MM/DD
Aqu铆 el c贸digo: https://gist.github.com/palafoxernesto/b6c37b17b0929b51c699e82682c3b1f0