You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Node.js和MongoDB的注册/登录页面POST请求404错误排查

注册登录页面POST请求404问题排查

开发注册与登录页面时,页面无法响应请求,POST请求返回404 (Not Found),已查阅POST方法示例但未定位到错误,相关代码如下:

前端注册页面代码

import { useState } from 'react'

function App() {
    const [name, setName] = useState('')
    const [email, setEmail] = useState('')
    const [password, setPassword] = useState('')

    async function registerUser(event) {
        event.preventDefault()

        const response = await fetch('http://localhost:3000/api/register', {
            method:"POST",
            headers: {
                'Content-Type': 'application/json',
            },
            body: JSON.stringify({
                name,
                email,
                password,
            }),
        })

        const data = await response.json()

        if (data.status === 'ok') {
            history.push('/login')
        }
    }

    return (
        <div>
            <h1>Register</h1>
            <form onSubmit={registerUser}>
                <input
                    value={name}
                    onChange={(e) => setName(e.target.value)}
                    type="text"
                    placeholder="Name"
                />
                <br />
                <input
                    value={email}
                    onChange={(e) => setEmail(e.target.value)}
                    type="email"
                    placeholder="Email"
                />
                <br />
                <input
                    value={password}
                    onChange={(e) => setPassword(e.target.value)}
                    type="password"
                    placeholder="Password"
                />
                <br />
                <input type="submit" value="Register" />
            </form>
        </div>
    )
}

export default App

请求报错信息

const response = await fetch('http://localhost:3000/api/register', {
            method:"POST",
            headers: {
                'Content-Type': 'application/json',
            },
            body: JSON.stringify({
                name,
                email,
                password,
            }),
        })
// 报错:Register.js:14 POST http://localhost:3000/api/register 404 (Not Found)

后端服务代码

const express = require("express")
const app = express()
const cors = require("cors")
const mongoose = require("mongoose")
const User = require("./models/user.model")
mongoose.connect("mongodb://localhost:27017/test-db")

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

app.post("/api/register",async(req,res)=>{
    console.log(req.body)
    try {
         await User.create({
            name:req.body.name,
            email:req.body.email,
            password:rawListeners.body.password // 此处存在错误
        })
        res.json({status:"ok"})
    } catch (err) {
        res.json({status:"error",error:"Duplicate email"})
    }
})
app.post("/api/login",async(req,res)=>{
        const user= await User.findOne({
            email:req.body.email,
            password:req.body.password
        })

        if(user){
            return res.json({status:"ok", user:true})
        }else{
            return res.json({status:"error",user:false})
        }
})

app.listen(3000,()=>{
    console.log("Server started")
})

路由配置代码

import React from 'react'
import { BrowserRouter, Route, Routes,Router } from 'react-router-dom'
import Login from './pages/Login'
import Register from './pages/Register'

const App = () => {
    return (
        <div>
            <BrowserRouter>
            <Routes>
                <Route path="/login" element={<Login />} />
                <Route path="/register" element={<Register />} />
            </Routes>
            </BrowserRouter>
        </div>
    )
}

export default App

问题定位与解决步骤

1. 后端接口语法错误

后端注册接口中,密码字段写成了rawListeners.body.password,这是明显笔误,需改为req.body.password。该错误会导致后端创建用户时抛出异常,若服务因此崩溃,会直接触发404错误。

2. 前端导航方法错误

React Router v6已移除history.push的直接使用方式,需改用useNavigate钩子:

import { useState, useNavigate } from 'react'

function App() {
    const navigate = useNavigate() // 初始化导航钩子
    // ... 其他代码

    async function registerUser(event) {
        // ... 请求逻辑
        if (data.status === 'ok') {
            navigate('/login') // 使用navigate跳转
        }
    }
}

3. 端口冲突导致服务未启动

若前端使用Create React App等框架,默认启动端口为3000,会与后端服务端口冲突,导致后端无法正常启动,从而返回404。解决方法:

  • 修改后端端口:将app.listen(3000)改为其他端口(如3001),同时前端请求地址改为http://localhost:3001/api/register
  • 或修改前端端口:在React项目中通过.env文件设置PORT=3001,避免端口冲突

4. 确认后端服务状态

检查后端控制台是否输出Server started,确保MongoDB已正常启动、后端连接数据库无异常。若后端未启动,前端请求必然返回404。

内容的提问来源于stack exchange,提问作者Cem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 11:46:04