Estoy usando reaccionar, nodejs y mongodb. Tengo una barra de búsqueda que envía una solicitud de publicación a una función de búsqueda que luego consulta mongodb y devuelve el resultado. El problema es que la función nunca se ejecuta.
Reaccionar:
const getData = (searchValue) => { const ourRequest = Axios.CancelToken.source(); async function fetchPost() { try { const response = await Axios.post(`/search`, { params: { searchValue }, cancelToken: ourRequest.token, }); if (response.data) { console.log(response.data); } else { dispatch({ type: 'notFound' }); } } catch (e) { console.log('There was a problem or the request was cancelled.'); } } fetchPost(); };
Expresar:
enrutador.js
apiRouter.post('/search', postController.search);
postController.js
exports.search = function (req, res) { Post.search(req.body.searchTerm) .then((posts) => { console.log('Hello..'); res.json(posts); }) .catch((e) => { res.json([]); }); };
Publicar.js:
Post.search = function (searchTerm) { return new Promise(async (resolve, reject) => { if (typeof searchTerm == 'string') { console.log('hello..', searchTerm) // nothing let posts = await Post.reusablePostQuery([ { $match: { $text: { $search: searchTerm } } }, { $sort: { score: { $meta: 'textScore' } } }, ]); resolve(posts); } else { reject(); } }); };
Cuando ingreso una búsqueda, obtengo una respuesta de matriz vacía en la consola de desarrollo.
Siempre es difícil solucionar preguntas como esta, ya que podría haber un problema en muchos lugares. Pero señalaré algunos que se destacan y espero que lo lleven a la respuesta.
Lo primero que salta a la vista es esto: req.body.searchTerm
. Está buscando el término de searchTerm
mientras su aplicación React no lo envía. En su lugar, está enviando searchValue
como en params: { searchValue }
que se traduce en params: { searchValue: searchValue }
.
Entonces deberías cambiar 2 cosas en tu código React.
const response = await Axios({ method: 'post', url: '/search', data: { searchTerm: searchValue }, cancelToken: ourRequest.token })
Estos cambios, en teoría, deberían resolver su problema.