Estoy tratando de obtener acceso a los parámetros de consulta usando Express en Node.js. Por alguna razón, req.params sigue apareciendo como un objeto vacío. Aquí está mi código en server.js :
const express = require('express'); const exphbs = require('express-handlebars'); const bodyParser = require('body-parser'); const https = require('https'); //custom packages .. //const config = require('./config'); const routes = require('./routes/routes'); const port = process.env.port || 3000; var app = express(); //templating engine Handlebars app.engine('handlebars', exphbs({defaultLayout: 'main'})); app.set('view engine', 'handlebars'); //connect public route app.use(express.static(__dirname + '/public/')); app.use(bodyParser.json()); //connect routes app.use('/', routes); app.listen(port, () => { console.log( 'Server is up and running on ' + port ); });Y aquí está mi archivo de rutas:
//updated const routes = require('express').Router(); routes.get('/', (req, res) => { res.render('home'); }); routes.post('/scan', (req, res) => { res.status(200); res.send("hello"); }); routes.get('/scanned', (req, res) => { const orderID = req.params; console.log( req ); res.render('home', { orderID }); }); module.exports = routes; Cuando el servidor está en funcionamiento, navego a http://localhost:3000/scanned?orderid=234 . El registro de la consola que tengo actualmente en el archivo routes.js muestra un cuerpo vacío (no reconoce el parámetro orderid en la URL).
orderid en la solicitud es el parámetro de consulta. Se debe acceder a él a través del objeto req.query no con req.params . Use el siguiente código para acceder al orderid pasado en la solicitud:
const orderID = req.query.orderid Ahora debería poder pasar el valor 234 en la URL de la solicitud.
O intente reemplazar el código de ruta /scanned con el siguiente:
routes.get('/scanned', (req, res) => { const orderID = req.query.orderid console.log( orderID ); // Outputs 234 for the sample request shared in question. res.render('home', { orderID }); });La razón por la que req.body sigue apareciendo como un objeto vacío es que en las solicitudes de get , como las que realiza el navegador durante la navegación, no hay ningún objeto de cuerpo. En una solicitud de get , la cadena de consulta contiene el ID de pedido al que intenta acceder. La cadena de consulta se adjunta a la URL. Su código se puede reescribir de la siguiente manera:
routes.get('/scanned', (req, res) => { const orderID = req.query.orderid console.log( req ); res.render('home', { orderID }); }); Sin embargo, una nota es que si tiene publicaciones AJAX que se activan dentro del código del lado del cliente, su req.body no estará vacío y puede analizarlo como lo haría normalmente.