我正在try 使用ReactJs、TypeScrip、NodeJS、Express和MySQL制作一个FullStack应用程序CRUD. 当我try 发布添加新产品时,此代码出现错误,返回: "TypeError:无法对‘req.body’的属性‘name’进行 struct 分析,因为它未定义."

Server.ts:

const express = require("express");
const cors = require("cors");
const mysql = require("mysql");

const app = express();

app.use(cors());
app.use(express.json());

const connection = mysql.createConnection({
  host: "localhost",
  user: "root",
  password: "QwQvfQuFwaU$33^#gQ3oddDZ",
  database: "REGPROD",
});

connection.connect((err) => {
  if (err) {
    console.error("Error connecting to MySQL: ", err);
  } else {
    console.log("Success!");
  }
});

app.listen(3001, () => {
  console.log("Server running on 3001");
});

// Create

app.post('/products', (req, res) => {
  const { name, value, image } = req.body;
  
  const query = "INSERT INTO products (name, value, image) VALUES (?, ?, ?)";
  connection.query(query, [name, value, image], (err, result) => {
    if (err) {
      console.error("Error creating product: ", err);
      res.status(500).send("Error creating product");
    } else {
      res.status(201).send("Product created successfully");
    }
  });
});


// Read

app.get('/products', (req, res) => {
  const query = "SELECT * FROM products";
  connection.query(query, (err, results) => {
    if (err) {
      console.error("Error fetching products: ", err);
      res.status(500).send("Error fetching products");
    } else {
      res.status(200).json(results);
    }
  });
});


// Update

app.put('/products/:id', (req, res) => {
  const productId = req.params.id;
  const { name, value, image } = req.body;

  const query = "UPDATE products SET name=?, value=?, image=? WHERE id=?";
  connection.query(query, [name, value, image, productId], (err, result) => {
    if (err) {
      console.error("Error updating product: ", err);
      res.status(500).send("Error updating product");
    } else {
      res.status(200).send("Product updated successfully");
    }
  });
});


// Delete

app.put('/products/:id', (req, res) => {
  const productId = req.params.id;
  const { name, value, image } = req.body;

  const query = "UPDATE products SET name=?, value=?, image=? WHERE id=?";
  connection.query(query, [name, value, image, productId], (err, result) => {
    if (err) {
      console.error("Error updating product: ", err);
      res.status(500).send("Error updating product");
    } else {
      res.status(200).send("Product updated successfully");
    }
  });
});

"

添加产品的屏幕:

import React, { useState } from "react";
import Header from "../../components/Header";
import Form from "../../components/Form";

interface Product {
  name: string;
  value: number;
  image?: string;
}

export default function AddProduct() {
  const [products, setProducts] = useState<Product[]>([]);

  const handleAddProduct = (newProduct: Product) => {
    setProducts([...products, newProduct]);
  };

  return (
    <div>
      <Header />
      <h1>CRUD Website</h1>
      <Form AddProduct={handleAddProduct} />
    </div>
  );
}

表格,在该页面中:

import React, { useState } from "react";

interface FormProps {
  AddProduct: (product: Product) => void;
}

interface Product {
  name: string;
  value: number;
  image?: string;
}

export default function Form({ AddProduct }: FormProps) {
  const [name, setName] = useState("");
  const [value, setValue] = useState(0);
  const [image, setImage] = useState("");

  const handleNameChange = (event: React.ChangeEvent<HTMLInputElement>) => {
    console.log(event.target.value);
    setName(event.target.value);
  };

  const handleValueChange = (event: React.ChangeEvent<HTMLInputElement>) => {
    setValue(Number(event.target.value));
  };

  const handleImageChange = (event: React.ChangeEvent<HTMLInputElement>) => {
    setImage(event.target.value);
  };

  const handleSubmit = async () => {
    console.log(name);
    
    const newProduct: Product = {
      name,
      value,
      image,
    };

    try {
      const response = await fetch("http://localhost:3001/products", {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
        },
        body: JSON.stringify(newProduct),
      });

      if (response.ok) {
        AddProduct(newProduct);
        setName("");
        setValue(0);
        setImage("");
      } else {
        console.error("Error adding product");
      }
    } catch (error) {
      console.error("Error adding product: ", error);
    }
  };

  return (
    <div>
      <h2>Cadastrar Novo Produto</h2>
      <form>
        <div>
          <label>Nome:</label>
          <input
            type="text"
            value={name}
            onChange={handleNameChange}
            required
          />
        </div>
        <div>
          <label>Valor:</label>
          <input
            type="number"
            value={value}
            onChange={handleValueChange}
            required
          />
        </div>
        <div>
          <label>Imagem:</label>
          <input type="text" value={image} onChange={handleImageChange} />
        </div>
        <button type="button" onClick={handleSubmit}>
          Cadastrar
        </button>
      </form>
    </div>
  );
}

是什么导致了这个错误,如何解决它?

推荐答案

您的Express服务器缺少body-parser middleware或类似的数字.

将其添加到您的服务器.然后您的帖子正文将被识别.

Node.js相关问答推荐

仅当所需文档是最后一个文档时才更新MongoDB,否则插入

在Node.js下使用PostgreSQL客户端聚合PostgreSQL中的用户定义类型

购物车是空的状态|本地存储不更新产品数量|Redux|

MongoDB - mongoose :如何查询这个? 填充()不起作用.它显示空

express cors request.body formData显示undefined

在 Header 中使用 Authorization 方法和新的附加参数:accessToken 有什么区别?

使用mongoose 创建新文档并仅取回选定的字段

ESLint:TypeError:this.libOptions.parse 不是函数

NodeJs 过滤掉目录异步

向 Stripe 提交付款请求时出现没有此类令牌错误

Puppeteer:如何提交表单?

npm 出现无法读取依赖项错误

node.js 模块和函数中this的含义

使用 Node.js 我得到错误:EISDIR,读取

Heroku + Node:找不到模块错误

node --experimental-modules,请求的模块不提供名为的导出

找不到在 docker compose 环境中运行的 node js 应用程序的模块

Nodejs将字符串转换为UTF-8

如何设置 useMongoClient (Mongoose 4.11.0)?

deno vs ts-node:有什么区别