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

POST请求成功创建用户但控制台未输出成功日志问题求助

问题分析与解决方案

看起来你遇到的问题核心是后端注册成功后未返回响应,加上前端错误处理逻辑的小混乱,导致成功日志无法打印。咱们一步步拆解修复:

核心问题1:后端未返回成功响应

你的后端代码里,当User.register成功创建用户后,没有向客户端发送任何响应(比如res.send或res.json)。这会导致浏览器的请求一直处于挂起状态,直到超时,此时res.ok会被判定为false,触发前端的错误分支,自然不会打印"Success"。

修复后端代码

在注册成功的分支里,返回标准的201 Created状态码(表示资源创建成功)和响应内容,同时优化错误分支的响应:

var express = require("express");
const { Error } = require("mongoose");
const passport = require("passport");
var router = express.Router();
const User = require("../models/user");
const catchAsync = require("../utils/catchAsync");

router.post(
  "/register",
  catchAsync(async (req, res) => {
    try {
      const { email, username, password } = req.body;
      const user = new User({ email, username });
      await User.register(user, password);
      // 新增:返回成功响应
      res.status(201).json({ message: "User registered successfully" });
    } catch (e) {
      // 直接向前端返回错误信息,而不是抛出错误(catchAsync会处理未捕获的异常,但主动返回更友好)
      res.status(400).json({ error: e.message || "Error signing up" });
    }
  })
);

module.exports = router;

核心问题2:前端混合使用async/await与.then/.catch

你前端代码里同时用了async/await和.then/.catch,这会导致错误处理的上下文混乱,比如.then里抛出的错误可能无法被外层的try/catch正确捕获。统一用async/await会让逻辑更清晰。

修复前端代码

同时修正拼写错误sumbitHandler→submitHandler:

const submitHandler = async (data) => {
  const { username, email, password } = data;
  try {
    const res = await fetch("http://localhost:9000/users/register", {
      method: "POST",
      body: JSON.stringify({ username, email, password }),
      headers: {
        "Content-Type": "application/json",
      },
    });

    if (!res.ok) {
      // 解析后端返回的具体错误信息
      const errorData = await res.json();
      throw new Error(errorData.error || "Registration failed");
    }

    // 解析成功响应并打印日志
    const successData = await res.json();
    console.log("Success:", successData.message);
  } catch (e) {
    console.log("Error:", e.message);
  }
};

为什么这样修复?

  1. 后端返回响应后,浏览器会立即收到201状态码,res.ok会被判定为true,进入前端的成功分支,打印日志。
  2. 统一使用async/await让错误处理逻辑更直观,所有异常都会被外层的try/catch捕获,不会出现遗漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 21:32:40