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

Node.js登录服务Postman测试报500内部服务器错误求助

Node.js登录服务500内部服务器错误排查与修复

问题核心原因

你的登录接口返回500错误,由以下代码问题直接导致:

1. 变量名冲突

auth.js中,你用user同时作为User模型的导入变量和查询结果变量,这会覆盖模型引用,后续操作会抛出异常。

2. 响应发送逻辑错误

密码校验时,if(originalPassword !== req.body.password) return这行的return未携带响应语句,导致后续的res.status(401).json(...)会无条件执行,触发"Cannot set headers after they are sent to the client"错误,最终返回500。

3. Mongoose拼写错误

index.js中把mongoose拼写成了moongose,会导致MongoDB连接失败,也是潜在的500错误诱因。

修复后的代码

auth.js

const router   = require("express").Router(); 
const User     = require("../models/user"); // 重命名模型变量避免冲突
const CryptoJS = require("crypto-js"); 
const jwt      = require("jsonwebtoken"); 

//Login Operation
router.post("/login", async (req, res) => {
    try 
    {
      const foundUser = await User.findOne({ email: req.body.email }); // 使用新变量名存储查询结果
      if(!foundUser) return res.status(401).json("Correo o Contraseña incorrectos");
  
      const bytes            = CryptoJS.AES.decrypt(foundUser.password, process.env.SECRET_KEY);
      const originalPassword = bytes.toString(CryptoJS.enc.Utf8);
  
      if(originalPassword !== req.body.password) {
        return res.status(401).json("Correo o Contraseña incorrectos"); // 将响应逻辑包裹在条件判断内
      }
  
      const accessToken = jwt.sign(
        { id: foundUser._id, isAdmin: foundUser.isAdmin },
        process.env.SECRET_KEY,
        { expiresIn: "5d" }
      );
  
      const { password, ...info } = foundUser._doc;
  
      res.status(200).json({ ...info, accessToken });

    }catch(err) 
    {
      console.error(err); // 打印错误到控制台,方便排查具体问题
      res.status(500).json("服务器内部错误");
    }
  });

module.exports = router;

index.js

const express  = require("express");  
const dotenv   = require("dotenv"); 
const mongoose = require("mongoose"); // 修正拼写错误
const app      = express(); 

//Aplication Routes
const authRoute = require("./routes/auth"); 

dotenv.config(); 

mongoose
.connect(process.env.MONGODB_URL, {
    useNewUrlParser:    true, 
    useUnifiedTopology: true, 
})
.then(()     => console.log("MongoDB Connection :Active"))
.catch((err) => console.log(err)); 

app.use(express.json()); 

//Use Routes
app.use("/api/auth", authRoute); 

app.listen(8800, () => {
    console.log("Backend Server :Active"); 
}); 

额外排查建议

  • 确保.env文件中配置了正确的SECRET_KEY和MONGODB_URL,且dotenv已正确加载。
  • 测试时可以查看控制台输出的错误信息,这是定位500错误最直接的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 14:10:31