localhost:8800/api/auth/register 500(内部服务器错误)试图注册一个新用户



我正在尝试使用react和mysql创建一个具有注册/登录/注销功能的网站,现在我有点困在注册部分。当尝试创建一个新用户时,我得到这个错误:

p://localhost:8800/api/auth/register 500 (Internal Server Error)

如果我尝试在url栏中写入localhost:8800/api/auth/register,这就是我在屏幕上发现的:Cannot GET /api/auth/register

这是我使用的代码:

服务器/index.js

import express from "express";
import authRoutes from "./routes/auth.js"
import cookieParser from "cookie-parser"
import cors from "cors"

const app = express()
// middlewares
app.use(express.json())
app.use(cors())
app.use(cookieParser())
app.use("/api/auth", authRoutes);

app.listen(8800, () => {
console.log("API working!");
});

服务器/connect.js

import mysql from "mysql"
export const db = mysql.createConnection({
host:"localhost",
user:"root",
password:"password",
database:"auth"
})

服务器/线路/auth.js


import express from "express";
import { login,register,logout } from "../controllers/auth.js";
const router = express.Router()
router.post("/register", register)
router.post("/login", login)
router.post("/logout", logout)

export default router

服务器/控制器/auth.js


import { db } from "../connect.js";
import bcrypt from "bcryptjs";
import jwt from "jsonwebtoken";
export const register = (req, res) => {
//CHECK USER IF EXISTS
const q = "SELECT * FROM users WHERE username = ?";
db.query(q, [req.body.username], (err, data) => {
if (err) return res.status(500).json(err);
if (data.length) return res.status(409).json("User already exists!");
//CREATE A NEW USER
//Hash the password
const salt = bcrypt.genSaltSync(10);
const hashedPassword = bcrypt.hashSync(req.body.password, salt);
const q =
"INSERT INTO users (`username`,`email`,`password`) VALUE (?)";
const values = [
req.body.username,
req.body.email,
hashedPassword,
];
db.query(q, [values], (err, data) => {
if (err) return res.status(500).json(err);
return res.status(200).json("User has been created.");
});
});
};
export const login = (req, res) => {
const q = "SELECT * FROM users WHERE username = ?";
db.query(q, [req.body.username], (err, data) => {
if (err) return res.status(500).json(err);
if (data.length === 0) return res.status(404).json("User not found!");
const checkPassword = bcrypt.compareSync(
req.body.password,
data[0].password
);
if (!checkPassword)
return res.status(400).json("Wrong password or username!");
const token = jwt.sign({ id: data[0].id }, "secretkey");
const { password, ...others } = data[0];
res
.cookie("accessToken", token, {
httpOnly: true,
})
.status(200)
.json(others);
});
};
export const logout = (req, res) => {
res.clearCookie("accessToken",{
secure:true,
sameSite:"none"
}).status(200).json("User has been logged out.")
};

src/页面/Register.jsx


import React, { useState } from 'react'
import { Link } from 'react-router-dom';
import "./register.scss";
import axios from "axios"
const Register = () => {
const [inputs, setInputs] = useState({
username:"",
email:"",
password:"",
})
const [err, setErr] = useState(null)

const handleChange = (e) => {
setInputs((prev) => ({ ...prev, [e.target.name]: e.target.value }));
};
const handleClick = async (e) => {
e.preventDefault()
try {
await axios.post("http://localhost:8800/api/auth/register", inputs)
} catch(err) {
setErr(err.response.data)
}
}
console.log(inputs)

return (
<div className='register'>
<div className="card">
<div className="left">
<h1>test-II</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipisci elit, sed do eiusmod tempor incidunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrum exercitationem ullamco laboriosam, nisi ut aliquid ex ea commodi consequatur.</p>
<span>Hai già un account?</span>
<Link to="/login">
<button>Login</button>
</Link>
</div>
<div className="right">
<h1>Registrazione</h1>
<form>
<input type="text" placeholder='Username' name="username" onChange={handleChange} />
<input type="email" placeholder='Email' name="email" onChange={handleChange} />
<input type="password" placeholder='Password' name="password" onChange={handleChange} />
{/* <p>{err && err}</p> */}
<button onClick={handleClick}>Registrati</button>
</form>
</div>
</div>
</div>
)
}
export default Register;

查询错误。应该是VALUES,应该有三个?,因为您要为三个列插入值。

另外,请注意,您不需要[values],values对于.query()的参数就足够了。

const q = "INSERT INTO users (`username`,`email`,`password`) VALUES (?, ?, ?)";
const values = [
req.body.username,
req.body.email,
hashedPassword,
];
db.query(q, values, (err, data) => {
if (err) return res.status(500).json(err);
return res.status(200).json("User has been created.");
});

最新更新