Hice una barra de búsqueda en la página de clientes de mi sitio web y cualquier cadena que ingrese el administrador en la barra de búsqueda se enviará como una solicitud de obtención y, según la entrada, estoy tratando de encontrar todos los datos en MySQL db que contiene el cadena de entrada dentro del campo de nombre completo.
Mi sitio web está construido como modelo MVC, usando Express para mostrar datos y Node.js
este es mi formulario
<form class="d-flex" method="GET"> <input class="form-control me-2 py-1" type="text" id="search" name="search" placeholder="Search customer name" aria-label="Search" value="<%= %>" /> <button class="btn btn-sm btn-secondary" type="submit">Search</button> </form>Esta es la ruta en el archivo web.js
router.get('/customer?search',authentication.handleAuthentication, authadmin.authAdmin,adminController.searchCustomer);getCustomerByName() dentro de adminServices.js
let getCustomerByName = (name) => { return new Promise(async (resolve, reject) => { try { let user = await db.User.find({ fullname: name }); if (user) { console.log(user); resolve(user); } else { resolve(user); } } catch (e) { reject(e); } });};
searchCustomer() dentro de adminController.js
let searchCustomer = async (req,res,next) =>{ let name = req.params.search; let customer = await adminServices.getCustomerByName(name); return res.render('admin/customer.ejs', { customer: customer, }); } Intenté req.body.search / req.params.search / req.query pero parece que no puede obtener la entrada. La URL como esta: http://localhost:8080/customer?search=mai . No pude encontrar dónde está el problema porque no se muestra nada en la consola. ¿Hay algún método que pueda probar?
Debe agregar una etiqueta de action al elemento de formulario. Cambie el nombre de la ruta a solo customer y use req.query.search en el controlador.
router.get('/customer', authentication.handleAuthentication, authadmin.authAdmin, adminController.searchCustomer); let searchCustomer = async(req, res, next) => { let name = req.query.search; // change params to query let customer = await adminServices.getCustomerByName(name); return res.render('admin/customer.ejs', { customer: customer, }); } <form class="d-flex" action="/customer" method="GET"> <input class="form-control me-2 py-1" type="text" id="search" name="search" placeholder="Search customer name" aria-label="Search" value="<%= %>" /> <button class="btn btn-sm btn-secondary" type="submit">Search</button> </form>