Estoy trabajando en un proyecto de administración reactiva que implica una conexión a un servidor express a través de un proveedor de datos.
No he podido hacer funcionar la ordenación o la paginación, y entiendo que tengo que hacer cambios en mis respuestas rápidas de la API para que estas funciones funcionen.
Escribí el código a continuación para detectar qué está enviando el parámetro de clasificación, con la esperanza de poder tener una respuesta API diferente según la URL de clasificación.
Me ha costado mucho conseguir que funcionen las funciones de ordenación y paginación. ¡Por favor ayuda si puedes! TY
usersRouter.get("/", addRAHeader, checkJwt, async (req, res) => { const user_id = req.query.sort console.log(user_id) if(req.query.sort === ["id","ASC"]) { try { connection.execute( // getUsers, getUsersASC, function(err, users, fields) { console.log("USERSDESC") res.status(200).json(users) } ) } catch (err) { res.json({message:err}); } } else if(req.query.sort === ["email","ASC"]) { try { connection.execute( // getUsers, getUsersASC, function(err, users, fields) { console.log("USERSASC") res.status(200).json(users) } ) } catch (err) { res.json({message:err}); } } else { try { connection.execute( // getUsers, getUsersASC, function(err, users, fields) { console.log("USERSELSE") res.status(200).json(users) } ) } catch (err) { res.json({message:err}); } } });```Para empezar, puede almacenar dos vars en una clasificación de variable de consulta única. Puede diseñar sus queryParams Like /?sortBy=id&sortOrder=DESC
Su código expreso podría verse así
usersRouter.get("/", addRAHeader, checkJwt, async (req, res) => { const user_id = req.query.sort const sortBy = req.query.sortBy const sortOrder = req.query.sortOrder //if(req.query.sort === ["id","ASC"]) { if(sortBy === "id" && sortOrder === "ASC") try { connection.execute( // getUsers, getUsersASC, function(err, users, fields) { console.log("USERSDESC") res.status(200).json(users) } ) } catch (err) { res.json({message:err}); } } // else if(req.query.sort === ["email","ASC"]) { else if(sortBy === "email" && sortOrder === "ASC") { try { connection.execute( // getUsers, getUsersASC, function(err, users, fields) { console.log("USERSASC") res.status(200).json(users) } ) } catch (err) { res.json({message:err}); } } else { try { connection.execute( // getUsers, getUsersASC, function(err, users, fields) { console.log("USERSELSE") res.status(200).json(users) } ) } catch (err) { res.json({message:err}); } } });Pude resolver este problema. Conceptualmente, lo que me faltaba es que react-admin use la clasificación y paginación del servidor.
Una vez que me di cuenta de eso, simplemente escribí un código en mi punto final de API express que pudo recibir correctamente los parámetros de clasificación y filtrado en la consulta de URL, y luego usé una función de creación de consultas para crear una consulta MySQL personalizada que reflejaba esos parámetros.
usersRouter.get("/", addRAHeader, checkJwt, async (req, res) => { setTimeout(() => { const { sort, range, filter } = req.query if (filter || range || sort !== undefined) { parsedFilter = JSON.parse(filter).q parsedRange = JSON.parse(range) lowerRange = parsedRange[0] upperRange = parsedRange[1] + 1 parsedSort = JSON.parse(sort) querySQL(queryBuilder(`${parsedSort[0]} ${parsedSort[1]}`, `${parsedRange[0]},${(upperRange - lowerRange)}`, parsedFilter), res) } else { querySQL(getUsers, res) } }, 1000) }); function queryBuilder (orderByParam, limit=10, filter='') { const query = `SELECT * FROM users Where email like '%${filter}' ORDER BY ${orderByParam} LIMIT ${limit};` // console.log("QueryBuilt:", query) return query } let querySQL = (query, res) => { try { connection.execute( query, function(err, users, fields) { res.status(200).json(users) } ) } catch (err) { res.json({message:err}); } }Una combinación de estas funciones anteriores resolvió el problema para mí.