如何使用 React 从 mongoose 读取 api

Posted

技术标签:

【中文标题】如何使用 React 从 mongoose 读取 api【英文标题】:How to read api from mongoose using React 【发布时间】:2020-04-16 01:45:55 【问题描述】:

我正在尝试从 mongodb 读取我的 rest api 中的数据。但是,我无法对从中读取数据做出反应。这是我的代码。我可以从其他 API 中提取,但不能从我的自定义中提取。我试过更改 json.data 但没有用。

import React from "react";

const url = "http://localhost:27017/projects";

export default class list extends React.Component 
  constructor(props) 
    super(props);
    this.state = 
      projects: []
    ;
  

  fetchData() 
    fetch(url)
      .then(res => res.json())
      .then(json => this.setState( projects: json.data ));
  

  componentWillMount() 
    this.fetchData();
  

  render() 
    return (
      <div>
        <h1 style= fontWeight: "1" >Project List</h1>
        <ul>
          this.state.projects.map(s => (
            <li>s.sId</li>
          ))
        </ul>
      </div>
    );
  

我认为我的 api 设置方式也存在问题。请看一下。是的,我可以通过我的邮递员获取 api。

var app = require("express")();
var mongoose = require("mongoose");
var bodyParser = require("body-parser");

app.use(bodyParser.json());

//create a connection to database
mongoose.connect("THE URL HERE");

//define a "table" structure
var ProjectSchema = new mongoose.Schema(
  sId: String,
  sName: String,
  sYear: String,
  cId: String,
  cName: String,
  sem: String,
  aName: String,
  aDes: String,
  aPer: String,
  tech: String,
  scope: String,
  des: String,
  company: String,
  app: String,
  photoURL: String
);

var Project = mongoose.model("Project", ProjectSchema);

app.get("/projects", function(req, res) 
  Project.find(, function(err, projects) 
    res.send(projects);
  );
);

app.post("/projects", function(req, res) 
  Project.create(req.body, function(err, project) 
    res.send(project);
  );
);

app.delete("/projects/:id", function(req, res) 
  Project.deleteOne( sId: req.params.id , function(err, result) 
    res.send(result);
  );
);

app.put("/projects/", function(req, res) 
  Project.findOneAndUpdate(
     sId: req.body.sId ,
     sName: req.body.sName ,
    function(err, result) 
      res.send(result);
    
  );
);

app.get("/projects/search/:keyword", function(req, res) 
  Project.find( sId: req.params.keyword , function(err, result) 
    res.send(result);
  );
);

app.listen(27017);

【问题讨论】:

【参考方案1】:

通常我们使用 componentDidMount 从 api 获取数据。 调用获取数据的最佳位置是在 componentDidMount() 中。 componentDidMount() 在客户端只被调用一次,而 componentWillMount() 被调用两次,一次到服务器,一次在客户端。它在客户端从服务器接收到数据并在数据显示在浏览器中之前进行初始渲染之后调用。

【讨论】:

以上是关于如何使用 React 从 mongoose 读取 api的主要内容,如果未能解决你的问题,请参考以下文章

如何从服务器端 express/mongo/mongoose 中的 URL,客户端的 axios/react/redux 中获取参数 ID

将对象数组添加到突变 react-graphql-apollo-mongoose 时,“无法读取未定义的属性 'get'”

如何使用 mongoose 从 mongoDB 中获取一定数量的对象? (Node.js)

无法读取未定义的属性“名称” - mongoose、express、nodeJS、ejs

将 url id 从 react-router 传递给 mongoose

将图像文件从 React 前端上传到 Node/Express/Mongoose/MongoDB 后端(不工作)