0

Building a MERN stack app, I am not able to retrieve data from the database using the userid, but if I don't specify this {userid: req.body.userid} parameter of await Transaction.find({ }) in the transactionsRoute.js, I am able to retrieve the data from the database, but it displays all the data which is present in the database irrespective of the users, what could be a possible fix for this?

transactionsRoute.js --->> There is no error message, but it is also not displaying any data from the database

const Transaction = require("../models/Transaction");
const router = express.Router();

router.post("/add-transaction", async function (req, res) {
  try {
    const newTransaction = new Transaction(req.body);
    await newTransaction.save();
    res.send("Transaction Added Successfully");
  } catch (error) {
    res.status(500).json(error);
  }
});

router.get("/get-all-transactions", async (req, res) => {
  try {
    const transactions = await Transaction.find({userid: req.body.userid});
    res.send(transactions);
  } catch (error) {
    console.log(error)
    res.status(500).json(error);
  }
});
module.exports = router;

transactionsRoute.js --->> There is no error message, but it is displaying all data from the database if I leave the parameter of await Transaction.find({ }); empty

const Transaction = require("../models/Transaction");
const router = express.Router();

router.post("/add-transaction", async function (req, res) {
  try {
    const newTransaction = new Transaction(req.body);
    await newTransaction.save();
    res.send("Transaction Added Successfully");
  } catch (error) {
    res.status(500).json(error);
  }
});

router.get("/get-all-transactions", async (req, res) => {
  try {
    const transactions = await Transaction.find({ });
    res.send(transactions);
  } catch (error) {
    console.log(error)
    res.status(500).json(error);
  }
});
module.exports = router;

Home.js --->> This is my main home page which displays the table

import axios from "axios";
import React, { useEffect, useState } from "react";
import AddEditTransaction from "../components/AddEditTransaction";
import DefaultLayout from "../components/DefaultLayout";
import Spinner from "../components/Spinner";
import "../resources/transactions.css";

function Home() {
  const [
    showAddEditTransactionModel,
    SetshowAddEditTransactionModel,
  ] = useState(false);

  const [loading, setLoading] = useState(false);
  const [transactionsData, setTransactionData] = useState([]);



  const getTransaction = async () => {
    try {
      const user = JSON.parse(localStorage.getItem("moneymanager"));
      setLoading(true);
      const response = await axios.get(
        "/api/transactions/get-all-transactions",
        { userid: user._id }
      );
      
      console.log(response.data)
      setTransactionData(response.data);
      setLoading(false);
    } catch (error) {
      setLoading(false);
      message.error("Something Went Wrong");
    }
  };


  useEffect(() => {
    getTransaction();
  }, []);

  const columns = [
    {
      title: "Date",
      dataIndex: "date"
    },
    {
      title: "Amount",
      dataIndex: "amount"
    },
    {
      title: "Category",
      dataIndex: "category"
    },
    {
      title: "Reference",
      dataIndex: "reference"
    },
    {
      title: "Description",
      dataIndex: "description"
    }

  ]

  return (
    <DefaultLayout>
      {loading && <Spinner />}
      <div className="filter d-flex justify-content-between align-items-center">
        <div></div>
        <div>
          <button
            className="primary"
            onClick={() => SetshowAddEditTransactionModel(true)}
          >
            ADD NEW
          </button>
        </div>
      </div>
      <div className="tabel-analytics">

        <div className="table">
          <Table columns={columns} dataSource={transactionsData} />

        </div>
      </div>

      {showAddEditTransactionModel && (
        <AddEditTransaction
          showAddEditTransactionModel={showAddEditTransactionModel}
          SetshowAddEditTransactionModel={SetshowAddEditTransactionModel}
        />
      )}
    </DefaultLayout>
  );
}

export default Home;

``

  • Convert your userId into an object Id following this https://stackoverflow.com/questions/6578178/node-js-mongoose-js-string-to-objectid-function and try – Charchit Kapoor Oct 10 '22 at 14:53

0 Answers0