Express服务POST /users/signin接口报500内部错误排查
500认证接口错误排查结果
核心根因
笔误导致的方法调用错误:你在生成JWT令牌时把方法名拼错了。
你在signin和signup两个控制器方法里,都写了jwt.sing(),但jsonwebtoken库生成令牌的正确方法名是jwt.sign(),字母n后面漏了g。
- 代码执行到生成token这一步时,会直接抛出
TypeError: jwt.sing is not a function的类型错误 - 错误被你写的catch块捕获,直接返回500状态码,这就是接口报错的直接原因
- 你能在MongoDB里查到正常存储的用户数据,是因为注册逻辑里
User.create()的执行顺序在JWT生成之前,数据已经成功写入数据库,但后续生成token步骤失败,导致整个接口返回500,前端拿不到正常响应。
修复步骤
把用户控制器文件里两处写错的方法名修正即可:
- 修正登录接口的token生成代码:
// 原错误代码 const token = jwt.sing(...) const token = jwt.sign({ email: existingUser.email, id: existingUser._id }, 'test', { expiresIn: "1h" });
- 修正注册接口的token生成代码:
// 原错误代码 const token = jwt.sing(...) const token = jwt.sign({ email: result.email, id: result._id }, 'test', { expiresIn: "1h" });
改完重启服务,认证接口就能正常返回200响应了。
额外优化建议
- 你贴的服务端入口代码里MongoDB连接字符串
const CONNECTION_URL = '**THIS_IS_MY_MONGO_DB;末尾缺少闭合单引号,如果服务启动时能正常连接数据库,说明是你贴代码打码时漏写,不用修改;如果启动时报语法错误,补上末尾的单引号即可。 - 建议在所有接口的catch块里加一行错误日志打印,后续再遇到500错误直接看服务端控制台的错误栈,就能快速定位问题,不用花几小时盲查:
catch (error) { console.log('接口运行错误:', error); res.status(500).json({ message: 'Algo salio mal.' }); }
内容的提问来源于stack exchange,提问作者ManP22
相关产品推荐
相关产品推荐

