Posthttp://localhost:3000/api/auth/register 404(Not Found)- nodeJs / React

jpfvwuh4  于 5个月前  发布在  Node.js
关注(0)|答案(2)|浏览(58)

我目前正在尝试学习,所以我遵循教程使用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函数,但它不成功
iaqfqrcu

iaqfqrcu1#

你可以为axios设置默认的基本url。

const axiosInstance = axios.create({
  baseURL: 'http://localhost:8800/api',
});

字符串
并使用此axiosInstance调用API。

await axiosInstance.post("/auth/register", inputs);

pvabu6sv

pvabu6sv2#

axios.post("http://localhost:8800/api/auth/register", inputs);

字符串

相关问题