Me preguntaba cómo puedo enviar un formulario HTML a mi servidor NodeJS y obtener la información enviada sin el uso de express, body-parser o cualquier otro módulo o npm.
Traté de buscarlo aquí en stackoverflow y busqué en Internet, pero no encontré a nadie que enseñara cómo enviar datos desde un formulario html a Vanilla NodeJS (usando las API de nodo)
Me he encontrado con muchas personas que usan expressJS para hacer esa tarea. y entiendo por qué, pero quiero profundizar y comprender mejor la API central de NodeJS.
pero desafortunadamente la documentación de la API de NodeJS no es tan buena, es muy confusa y difícil de navegar y algunas funciones no se explican qué argumentos toman y cómo funcionan.
He escrito el siguiente código y no estoy seguro de cómo ir desde allí:
SERVER.JS
const fs = require('fs'); const http = require('http'); const PORT = 3000; let server = http.createServer((req,res) =>{ if (req.url == '/'){ fs.readFile('./views/index.html', 'utf-8',(err,data) => { if (err) { console.log(err); res.end(); } res.write(data); res.end(); }); }else{ res.writeHead(404,'Page not found'); res.end(); } }).listen(PORT) console.log(`Server is running on port ${PORT}, vist http://localhost:${PORT}`); index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <h1>Is your username taken?</h1> <form method="POST" action="/"> <input type="text" name="USER"> <input type="submit" value='Check'> </form> </body> </html>Estructura del archivo:
views | |_ index.html server.jsEl objeto req tendrá una propiedad de method que le dirá si es una solicitud POST.
Si es así, dado que es un flujo legible, puede escuchar data y end eventos en él para leer los datos en el cuerpo. (Este es un enfoque bastante estándar para Node.js donde puede agregar una variable de cadena en cada evento de data y luego hacer algo con la cadena terminada en el evento end siempre que sus datos entrantes no sean demasiado grandes. Un sistema robusto necesitaría un caso especial de solicitudes grandes para evitar ataques triviales de denegación de servicio que hacen que el servidor se quede sin memoria).
Entonces tendrás que analizarlo. Como no tiene un atributo enctype , tendrá el formato application/x-www-form-urlencoded que se describe en la descripción de una solicitud POST de MDN.