Soy nuevo en desarrollo backend con MongoDB, NodeJS y desarrollo frontend con React-JS. Quería crear un punto final de API que encontrara los datos de MongoDB y filtrara por dirección de correo electrónico del usuario cuando el usuario iniciara sesión en el sistema. Mi sistema de inicio de sesión está completamente bien. Pero el problema es que cuando trato de recuperar datos del lado del cliente, los datos de tiempo no se muestran (obtienen) en la interfaz de usuario. Encuentra y matriz vacía. Quiero saber cuál es el problema en mi código.
Aquí está mi código API para backend:
app.get('/myproducts', async (req, res) => { const email = req.query.email; const query = { email: email }; const cursor = inventoryCollection.find(query); const myProducts = await cursor.toArray(); console.log(myProducts); res.send(myProducts); });
Código del lado del cliente:
useEffect(() => { const getMyProducts = async () => { const email = user?.email; console.log(email); const url = `http://localhost:5000/myproducts?email=${email}`; try { await fetch(url) .then(res => res.json()) .then(data => setProducts(data)) } catch (error) { console.log(error?.message) } } getMyProducts(); }, [user])
Lo resolví, hubo un error mío. Cuando agregué el producto en mi inventario esa vez, no guardé mi correo electrónico en la base de datos con esa publicación. Después de guardar mi correo electrónico en la base de datos, ahora puedo filtrar el producto por correo electrónico y también mostrarlo en la interfaz de usuario.
const handleProductPost = (event) => { event.preventDefault(); const email = user.email; //before, I did not added this email when posting const productName = event.target.productName.value; const image = event.target.image.value; const description = event.target.description.value; const price = event.target.price.value; const quantity = event.target.quantity.value; const supplierName = event.target.supplierName.value; const product = { email, productName, image, description, price, quantity, supplierName }; fetch('https://back-pack-warehouse.herokuapp.com/product', { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify(product) }) .then(res => res.json()) .then(data => { if (data.insertedId) { toast('Product Added Successfully'); event.target.reset(); } }); }
La función toArray
existe en la clase Cursor del controlador Native MongoDB NodeJS. El método de búsqueda en MongooseJS devuelve un objeto Query .
En este caso, puede iniciar sesión directamente o enviar su cursor
usando res.send(cursor)
.