簡體   English   中英

如何從 MongoDB 獲取數據?

[英]How to fetch data from MongoDB?

我正在嘗試使用 Express + MongoDB 構建 React 應用程序。

我能夠將一些文件發布到 MongoDB。 目前,我正在嘗試弄清楚如何將獲取的數據打印到屏幕上。

我有這些路線:

router.post('/totalbalance', (request, response) => {
    const totalBalance = new TotalBalanceModelTemplate({
        totalBalance:request.body.totalBalance,
    });
    totalBalance.save()
    .then(data => {
        response.json(data);
    })
    .catch(error => {
        response.json(error);
    });
});

router.get('/totalbalance', (request, response) => {
    TotalBalanceModelTemplate.find(request.body.totalBalance, (error, data) => {
        if (error) {
            return error
        } else {
            response.json(data[0])
        }
    })
});

這是 axios 請求:

   useEffect(() => {
        const resp = axios.get('http://localhost:4000/app/totalbalance');

        console.log(resp);
    }, []);

它返回一個 promise ,其參數data等於 object 值,這是數組中的第一個值

data: {_
    id: "60c48b4ec60919553d92319f", 
    totalBalance: 5555, 
    __v: 0
}

並將其打印到控制台。

如何將值totalBalance而不是整個 promise 打印到控制台?

順便說一句,有時data數組為空(數據庫中沒有文檔),我應該如何處理這些情況?

謝謝!

首先,Axios GET 方法沒有任何請求體。 但是您正嘗試在 MongoDB 查詢中使用它。 -“TotalBalanceModelTemplate.find(request.body.totalBalance,(錯誤,數據)=> {”。

查找查詢應為 object {}。 如果需要將條件傳遞給它。

第一點,只打印“totalBalance”output。 使用,console.log(resp.totalBalance);

第二點,處理記錄長度,有一個if else條件,

    if (error) {
       return error
    } else if (data.length) {
       return response.send("No records found")
    } else {
       response.json(data[0])
    }

嘗試這個:

路線

router.post("/totalbalance", async (req, res) => {
  try {
    const totalBalance = new TotalBalanceModelTemplate({
        totalBalance: req.body.totalBalance,
    })
    await totalBalance.save();
    res.json(totalBalance)
  } catch (error) {
    res.status(400).json({
      message: error.message
    })
  }
})

router.get("/totalbalance", async (req, res) => {
  try {
    const totalBalances = await TotalBalanceModelTemplate.find();
    res.json(totalBalances)
  } catch (error) {
    res.status(400).json({
      message: error.message
    })
  }
})

應用程序.js

import React, { useState, useEffect } from 'react';
import axios from 'axios';

export default function App() {
  const [data, setData] = useState([]);

  const getData = async () => {
    try {
      const response = await axios.get('http://localhost:4000/app/totalbalance');
      await setData(response);
    } catch (error) {
      console.log(error);
    }
  };

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

  return (
    <div>
      {data <= 0 ? (
        <div className="empty">
          <p>No data!</p>
        </div>
      ) : (
        data.map((d) => (
          <ul key={d.id}>
            <li>{d.totalBalance}</li>
          </ul>
        ))
      )}
    </div>
  );
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM