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

Express.js的/api/auth接口无响应求助(MERN栈学习中)

排查Express.js中/api/auth接口无响应问题

以下是导致接口一直处于"Processing"状态的核心问题及修复方案:

1. 数据库连接未处理异常,导致请求挂起

你的db.js中connectToMongo是异步函数,但index.js调用时既没有等待连接完成,也没有捕获连接错误。如果MongoDB服务未启动、连接地址有误,mongoose会持续尝试连接,后续数据库操作会一直处于pending状态,直接导致接口无响应。

修复方法:
修改index.js,用async/await处理数据库连接并捕获错误:

const connectToMongo = require("./db.js")
const express = require('express')

const startServer = async () => {
  try {
    await connectToMongo()
    const app = express()
    const port = 3000

    app.use(express.json())

    app.use("/api/auth", require("./routes/auth") )
    app.use("/api/notes", require("./routes/notes") )

    app.listen(port, () => {
      console.log(`Example app listening on port http://127.0.0.1:${port}`)
    })
  } catch (err) {
    console.error("MongoDB连接失败:", err)
    process.exit(1)
  }
}

startServer()

同时确认本地MongoDB服务已启动,mongoURI地址无误(默认端口27017)。

2. 路由处理存在重复响应+未捕获数据库异常

auth.js的路由逻辑有两个关键问题:

  • 先调用res.send("aa")发送响应,后续又执行res.json(user),这不仅会导致报错,更严重的是User.create未捕获错误,当创建用户失败(比如缺少必填字段)时,Promise会reject但没有处理,请求会一直挂起。
  • 验证规则中body("email").isEmail缺少括号,应该是isEmail(),否则验证器不会生效。

修复后的auth.js:

const express = require("express")
const router = express.Router()
const User = require("../models/User")
const { body, validationResult } = require('express-validator');

router.post("/", [
  body('username').isLength({ min: 3 }),
  body("email").isEmail(), // 补上调用括号
  body('password').isLength({ min: 6 }),
], async (req, res) => {
  // 先处理验证错误
  const errors = validationResult(req);
  if (!errors.isEmpty()) {
    return res.status(400).json({ errors: errors.array() });
  }

  try {
    // 模型中email是必填项,必须传入
    const user = await User.create({
      username: req.body.username,
      email: req.body.email,
      password: req.body.password,
    });
    res.json(user);
  } catch (err) {
    console.error("创建用户失败:", err);
    res.status(500).json({ message: "服务器内部错误" });
  }
})

module.exports = router;

3. 创建用户时缺少必填的email字段

原代码中User.create只传入了username和password,但User模型里email是必填且唯一的字段,这会触发MongoDB的验证错误,而未捕获的错误会让请求一直处于pending状态。修复时要确保传入请求中的email字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 22:20:41