我目前正在尝试学习,所以我遵循教程使用mysql,express和react创建博客应用程序。
我正在尝试实现一个身份验证系统,但在注册部分卡住了。
似乎我有一个问题,我的前面,因为当我试图填写我的注册表,我得到以下错误:
404 Not Found Not Found Not Found Not Found
Register.jsx:24
下面是我的代码-在服务器端:Index.js
:
import express from "express";
import postRoutes from "./routes/posts.js"
import userRoutes from "./routes/users.js"
import authRoutes from "./routes/auth.js"
import cookieParser from "cookie-parser";
import cors from "cors";
const app = express();
app.use(
cors({
origin: "http://localhost:3000",
credentials: true
})
);
app.use(express.json());
app.use(cookieParser());
app.use("/api/auth", authRoutes);
app.use("/api/users", userRoutes);
app.use("/api/posts", postRoutes);
app.listen(8800,()=>{
console.log('Connected');
})
字符串controllers/auth.js
:
import { db } from "../db.js";
import bcrypt from "bcrypt";
import jwt from "jsonwebtoken";
export const register = (req, res) => {
//CHECK EXISTING USER
const q = "SELECT * FROM users WHERE email = ? OR username = ?";
db.query(q, [req.body.email, req.body.username], (err, data) => {
if (err) return res.status(500).json(err);
if (data.length) return res.status(409).json("User already exists!");
//Hash the password and create a user
// const salt = bcrypt.genSaltSync(10);
// const hash = bcrypt.hashSync(req.body.password, salt);
const pwd = bcrypt.hash(req.body.password, 10, function(err, hash) {
// Store hash in your password DB.
});
const q = "INSERT INTO users(`username`,`email`,`password`) VALUES (?)";
const values = [req.body.username, req.body.email, pwd];
db.query(q, [values], (err, data) => {
if (err) return res.status(500).json(err);
return res.status(200).json("User has been created.");
});
});
};
型routes/auth.js
:
import express from "express";
import { register, login, logout } from "../controllers/auth.js";
const router = express.Router();
router.post("/register", register);
router.post("/login", login);
router.post("/logout", logout);
export default router;
型
在package.json
中,我添加了:
"proxy": "http://localhost:8800/api/"
型
最后,客户端:
import React from "react";
import { useState } from "react";
import { Link, useNavigate } from "react-router-dom";
import axios from "axios";
const Register = () => {
const [inputs, setInputs] = useState({
username: "",
email: "",
password: "",
});
const [err, setError] = useState(null);
const navigate = useNavigate();
const handleChange = (e) => {
setInputs((prev) => ({ ...prev, [e.target.name]: e.target.value }));
};
const handleSubmit = async (e) => {
e.preventDefault();
try {
await axios.post("/auth/register", inputs);
navigate("/login");
} catch (err) {
setError(err.response.data);
}
};
return (
<div className="auth">
<h1>Register</h1>
<form>
<input
required
type="text"
placeholder="username"
name="username"
onChange={handleChange}
/>
<input
required
type="email"
placeholder="email"
name="email"
onChange={handleChange}
/>
<input
required
type="password"
placeholder="password"
name="password"
onChange={handleChange}
/>
<button onClick={handleSubmit}>Register</button>
{err && <p>{err}</p>}
<span>
Do you have an account? <Link to="/login">Login</Link>
</span>
</form>
</div>
);
};
export default Register;
型
以下是我已经尝试过的:
- 我尝试在没有代理的情况下,用我的整个URL创建一个const,然后在我的
axios.post(url, inputs)
中使用它。 - 添加了cors
- 我试图添加console.logs在我的注册函数或我的
handleSubmit
函数,但它不成功
2条答案
按热度按时间iaqfqrcu1#
你可以为axios设置默认的基本url。
字符串
并使用此axiosInstance调用API。
型
pvabu6sv2#
做
字符串