MySQL插入查询成功但未插入数据库表

问题描述 投票:0回答:2

我正在开发 React/MySQL 注册页面。 插入查询运行,但未插入到数据库表中。 我不知道为什么。

在后端文件夹中,我有我的 server.js 文件:

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

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

const db = mysql.createConnection({
  host: "localhost",
  user: "root",
  password: "",
  database: "my_db",
});

app.post("/signup", (req, res) => {
  const sql = "INSERT INTO login (`name`, `email`, `password`) VALUES (?)";
  const values = [req.body.name, req.body.email, req.body.password];
  db.query(sql, [values], (err, data) => {
    if (err) return res.json(err);
    return res.json(data);
  });
});

app.listen(8081, () => {
  console.log("Listening...");
});    

在我的前端文件夹中,我有 App.js,如下所示:

import React from "react";
import SignUp from "./SignUp";

function App() {
  return <SignUp></SignUp>;
}

export default App;

然后是我的 SignUp.js 文件:

import React, { useState } from "react";
import axios from "axios";

function SignUp() {
  const [values, setValues] = useState({
    name: "",
    email: "",
    password: "",
  });
  const handleChange = (event) => {
    setValues({ ...values, [event.target.name]: [event.target.value] });
  };
  const handleSubmit = (event) => {
    event.preventDefault();
    axios
      .post("http://localhost:8081/signup", values)
      .then((res) => console.log("Registered Successfully"))
      .catch((err) => console.log(err));
  };

  return (
    <form onSubmit={handleSubmit}>
      <input
          type="text"
          placeholder="Enter Name"
          name="name"
          className="form-control rounded-0"
          onChange={handleChange}
        />
      // 2 more inputs for email and password
    </form>
  );
}

export default SignUp;

NPM start 用于运行后端和前端。

我正在使用在 localhost:8888 上运行 phpMyAdmin 的 MAMP 服务器

表单已启动并正在运行,当我输入姓名、电子邮件和密码时,控制台显示“注册成功”,但刷新数据库后,没有插入任何记录。

我知道查询可以成功运行而无需插入任何内容,但在这种情况下,我不确定为什么查询未正确插入。

我做错了什么以及如何解决?

编辑

我按照 Phil 和 MatBailie 的建议对 server.js 进行了以下编辑 在下面的评论中:

app.post("/signup", (req, res) => {
  const sql =
    "INSERT INTO login (`name`, `email`, `password`) VALUES (?, ?, ?)";
  const values = [req.body.name, req.body.email, 
req.body.password];
  db.query(sql, values, (err, data) => {
    // if (err) return res.json(err);
    // return res.json(data);
    if (err) {
      console.error("Error in signup", err);
      return res.sendStatus(500);
    }
  });
});

我在控制台中收到以下 Axios 错误:

POST http://localhost:8081/signup 500 (Internal Server Error)

在网络选项卡中,我看到这个:

enter image description here

编辑2

Axios错误的响应部分内容如下:

enter image description here

javascript mysql node.js express mamp
2个回答
1
投票

试试这个

const sql = "INSERT INTO login (`name`, `email`, `password`) VALUES (?, ?, ?)";

const sql = "INSERT INTO login SET ?";
db.query(sql, request.body, (err, data) => {
   if (err) return res.json(err);
   return res.json(data);
});

0
投票

原来 MAMP 服务器是我的问题。 切换到 XAMPP 后,我能够将表单数据捕获到数据库中。

© www.soinside.com 2019 - 2024. All rights reserved.