Tengo un archivo que se ve más o menos así:
const express = require('express'), cookieParser = require('cookie-parser'), http = require('http'), path = require('path'), bodyParser = require('body-parser'), app = express(), server = http.createServer(app); app.use(bodyParser.urlencoded({extended: true})); app.use(express.static(path.join(__dirname,'./pub'))); app.use(cookieParser()); app.get('/', (req,res) => { res.sendFile(path.join(__dirname,'./index.html')); }); app.post('/test', (req, res) => { console.log(req.query); //returns empty object even though it shouldn't // does other stuff here }); server.listen(3000, function() { console.log('server is listening on port: 3000'); });Llamar a foo.bar/test.html?query=foobar devuelve un formulario de inicio de sesión html que envía la solicitud a la ruta /test al enviar, y espero que el resultado de la consola.log anterior sea { consulta: "foobar} , pero está vacío.
Todo lo demás en la aplicación funciona según lo previsto (la solicitud de inicio de sesión, guardar la sesión, etc.) con la excepción de la cadena de consulta.
El formulario de solicitud:
<!DOCTYPE html> <html lang = "en"> <head> <meta charset = "UTF-8"> <title>Login</title> </head> <body> <form action="/test" method="POST"> <fieldset> <label for="email">Email</label> <input type ="email" id="email" name="email" placeholder="abc@example.com" required> <label for="password">Password</label> <input type="password" id="password" name="password" required> <button type ="submit">Submit</button> </fieldset> </form> </body> </html>Al realizar una solicitud mediante un formulario html , se puede acceder a los accesorios mediante req.body . Los datos no se envían mediante una cadena de querystring (por lo que no se agregan a la URL), sino que se agregan a la carga útil de la solicitud.
Aquí hay un código para leer los datos de la solicitud.
app.post('/test', (req, res) => { console.log('in login:') console.log(JSON.stringify(req.body)); // use req.body since there's no querystring. res.status(200).send('Login succeeded for user ' + req.body.email) });Estas son las posibles soluciones que puede probar:
Asegúrese de usar el método POST cuando pruebe la API, ya que ha usado el método POST en la ruta.
Además, la URL de la API debe tener el formato http://localhost:3000/user?name=Karliah . Esto debería imprimir { name : 'Karliah'}
app.get('/test', (req,res) => { app.set('source', req.query.source); res.sendFile(path.join(__dirname,'./pub/test.html')); });Insertar esto en el archivo mencionado en la pregunta agrega una variable de "fuente" a la que se puede acceder en la solicitud POST:
app.post('/test', (req, res) => { console.log(req.app.get('source')); //returns the value // does other stuff here });La URL a la que llamo ya no usa el .html: antes: foo.bar/test.html?source=123 después: foo.bar/test?source=123