繁体   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