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

Express服务器POST请求失败:Cannot POST /auth/login及404错误求助

问题排查与修复方案

一、解决接口404错误

前后端接口路径不匹配是导致404的核心原因:后端路由前缀为/api/auth,但前端请求时缺少/api前缀。

1. 修改Register.js的请求路径

找到handleSubmit中的axios请求,补充/api前缀:

// 原代码
await axios.post("/auth/register", inputs);
// 修改后
await axios.post("/api/auth/register", inputs);

2. 修正AuthContext中login方法的请求路径

确保AuthContext里的login函数请求路径为/api/auth/login(示例参考):

// 假设AuthContext中的login实现
const login = async (inputs) => {
  const res = await axios.post("/api/auth/login", inputs);
  // ...其他逻辑
};

3. 移除form标签无效的action属性

Login和Register组件中的form标签action="/"属于冗余配置(已通过e.preventDefault()阻止默认提交),建议移除:

// 原代码
<form action="/" method="post">
// 修改后
<form>

二、修复bcrypt未导入问题

auth控制器中bcrypt的导入被注释,导致密码哈希和验证逻辑报错:

1. 取消bcrypt导入注释

打开controllers/auth.js,取消bcrypt的导入注释:

// 原代码
//import bcrypt from "bcrypt";
// 修改后
import bcrypt from "bcrypt";

2. 安装bcrypt依赖

如果未安装bcrypt,执行命令:

npm install bcrypt

三、修复deletePost方法的拼写错误

post控制器中存在两处拼写错误:

1. 修正json方法拼写

// 原代码
if(err) return res.status(403).josn("You can delete on your post!");
// 修改后
if(err) return res.status(403).json("You can only delete your own post!");

2. 修正单词拼写(可选)

将"Token is not vaild!"改为"Token is not valid!":

// 原代码
if(err) return res.status(403).json("Token is not vaild!")
// 修改后
if(err) return res.status(403).json("Token is not valid!")

四、其他潜在问题修复

1. 完善数据库连接验证

在db.js中添加连接状态验证,确保数据库正常连接:

import mysql from "mysql";

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

// 添加连接验证
db.connect((err) => {
  if (err) {
    console.error("Database connection failed: ", err);
    return;
  }
  console.log("Connected to database successfully!");
});

2. 修正服务器启动日志

index.js中的日志提示不准确,修改为:

app.listen(PORT, () =>{
    console.log(`Server running on port ${PORT}`);
})

3. 移除Login组件无效属性

密码输入框的password="password"属性无效,删除该属性:

// 原代码
<input
  type="password"
  name="password"
  password="password"
  placeholder="Password"
  onChange={handleChange}
/>
// 修改后
<input
  type="password"
  name="password"
  placeholder="Password"
  onChange={handleChange}
/>

内容的提问来源于stack exchange,提问作者Arif Shahriyar Nader

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 23:15:34