Quiero crear una página de inicio de sesión para mi aplicación web y quiero enviar datos a mi servidor express usando fetch pero cuando registro el requerimiento en la consola, el "req.body" es un objeto vacío incluso si envié un objeto con nombre y las propiedades de la contraseña ¿alguien puede ayudar?
código del lado del cliente:
<!DOCTYPE html> <html> <head> </head> <body> <input type="text" id="name" name="name" /> <input type="password" id="password" name="password" /> <button onclick="send()">login</button> <script> async function send() { let name = document.getElementById('name').value let password = document.getElementById('password').value let res = await fetch('http://localhost:3000/api/login', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ name, password }) }) if(res.redirected) { window.location.href = "/chat" localStorage.setItem('name', name) localStorage.setItem('password', password) } else { alert('not correct :P') } } </script> </body> </html>código del lado del servidor:
app.use(express.urlencoded({ extended: true })); app.post('/api/login', (req, res) => { console.log(req.body) // why the output is an empty object {} res.redirect('/login') })Soy un desarrollador frontend y soy nuevo en el backend #editar: el código de mi servidor era app.post() pero accidentalmente puse app.get() #porque reescribí el código del servidor, no lo pegué
Pruebe app.post en lugar de app.get . Consulte https://expressjs.com/en/guide/routing.html
Su javascript está realizando una solicitud HTTP POST, pero Express solo está manejando una solicitud HTTP GET.
body-parser/login de sesión.Primero, cambie app.get a app.post para manejar la solicitud de publicación.
En segundo lugar, agregue el analizador de cuerpo JSON incorporado para agregar correctamente la propiedad "cuerpo" al objeto de solicitud. app.use(express.json())
Para manejar la autenticación de manera más robusta, use pasaportejs.