javascript - 将 Express 后端数据从数据库发送到 React 前端

标签 javascript node.js reactjs express

我试图在前端显示有关用户的一些信息,但我不知道为什么没有显示任何内容。如果我使用 localhost:8080/api/user 访问服务器,我可以在 empty page 中看到信息。 (只是我拥有的一个虚拟数据库),但我无法在我的内容页面中打印它们,我的代码将列表识别为空。 我是初学者,刚刚开始使用 React、Node.js 和 Express。

UserStatus.js

import React from 'react';

class UserStatus extends React.Component {

  constructor(props){
    super(props);
    this.state = {
      list: []
    }
  }
  // Fetch the list on first mount
  componentDidMount() {
  }
  // Retrieves the list of items from the Express app
  getList = () => {
    fetch('/api/user')
    .then(res => res.json())
    .then(list => this.setState({ list })
    )
  }

  render() {
    const { list } = this.state;
    return (
      <div className="App">
        <h1>User Status</h1>
        {/* Check to see if any items are found*/}
        {list.length ? (
          <div>
            {/* Render the list of items */}
            {list.map((item) => {
              return(
                <div>
                  {item}
                </div>
              );
            })}
          </div>
        ) : (
          <div>
            <h2>No List Users Found</h2>
          </div>
        )
      }
      </div>
    );
  }
}
export default UserStatus

server.js

//Initiallising node modules
var express = require("express");
var bodyParser = require("body-parser");
var sql = require("mssql");
var app = express();

// Body Parser Middleware
app.use(bodyParser.json());

//CORS Middleware
app.use(function (req, res, next) {
    //Enabling CORS 
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, contentType,Content-Type, Accept, Authorization");
    next();
});

//Setting up server
var server = app.listen(process.env.PORT || 8080, function () {
    var port = server.address().port;
    console.log("App now running on port", port);
});

//Initiallising connection string
var dbConfig = {
    user: '---',
    password: '---',
    server: '----',
    database: '---'
};

//Function to connect to database and execute query
var executeQuery = function (query, res) {
    sql.connect(dbConfig, function (err) {
        if (err) {
            console.log("Error while connecting database :- " + err);
            res.send(err);
        } else {
            // create Request object
            var request = new sql.Request();
            // query to the database
            request.query(query, function (err, ress) {
                if (err) {
                    console.log("Error while querying database :- " + err);
                    res.send(err);
                } else {
                    res.json(ress);
                }
            });
        }
    });
}

//GET API
app.get("/api/user", function (req, res) {
    var query = "select * from Machine";
    executeQuery(query, res);
});

//POST API
app.post("/api/user", function (req, res) {
    var query = "INSERT INTO [user] (Name,Email,Password) VALUES (req.body.Name,req.body.Email,req.body.Password)";
    executeQuery(res, query);
});

//PUT API
app.put("/api/user/:id", function (req, res) {
    var query = "UPDATE [user] SET Name= " + req.body.Name + " , Email=  " + req.body.Email + "  WHERE Id= " + req.params.id;
    executeQuery(res, query);
});

// DELETE API
app.delete("/api/user /:id", function (req, res) {
    var query = "DELETE FROM [user] WHERE Id=" + req.params.id;
    executeQuery(res, query);
});

最佳答案

要进行调试,您可以设置断点或使用 console.log 或其他控制台方法。首先,您可以检查您的获取响应:

getList = () => {
  fetch('/api/user')
  .then(res => {
    console.log(res) // is it a string or is it already json? What is the data structure?
    return res.json()
  })
  .then(list => this.setState({ list }))
  .catch(err => console.error(err)) // you should handle errors
 }

您还应该捕获错误。在我看来,您正在返回一个具有顶级“记录集”属性的数据集。所以你可能必须这样做: return res.json().recordset

关于javascript - 将 Express 后端数据从数据库发送到 React 前端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60477856/

相关文章:

javascript 在使用母版页的内容页面中不起作用

node.js - 对 Node/Express 应用程序使用 connect-flash 时无法获取要渲染的 Flash 消息

javascript - 类型错误 : Cannot read property 'state' of undefined in bootstrap

javascript - 如何正确构建 React 模块化库

javascript - 如何在 testcafe 脚本中添加递归函数检查 xhr 响应?

javascript - 求和而不是连接

javascript - nodejs - 从子模块调用父模块内的函数

javascript - 如何处理Flux中的关系?

javascript - 在 Web 表单中动态创建复杂的选择对象

javascript - Nodejs mysql表有很多列可以动态更新