Node.js + TypeScript后端登录接口无法返回完整用户数据求助
Node.js + TypeScript后端登录接口无法返回完整用户数据求助
你好呀!我仔细看了你的问题描述和代码,咱们一步步来排查这个问题~
首先发现一个关键矛盾点:
你贴的实际输出里包含了"message": "Login successful",但你提供的login函数代码里完全没有返回这个message的逻辑!这大概率说明你当前运行的后端代码,并不是你现在贴的这段修改后的代码😅。这是新手常踩的坑——改完代码忘记重启Node服务,导致服务还在跑旧版本的逻辑。
具体排查&解决步骤:
立刻重启你的Node后端服务
不管你是用nodemon还是直接node启动的,改完TypeScript代码后(如果用了ts-node还要确保重新编译/重启),一定要重启服务让新代码生效。这一步90%能解决你的问题!确认
login函数的返回逻辑完全替换正确
检查你的代码,确保已经把原来返回{ message: "Login successful", token }的旧代码完全删掉或注释掉,并且保留了这段正确的逻辑:const token = jwt.sign({ id: user.id }, JWT_SECRET, { expiresIn: '10h' }); let finalResult = { ...user, token } res.json({ user: finalResult });这段代码理论上会返回你预期的
{"user": {...完整用户信息+token}}结构。加日志调试,定位问题环节
如果重启服务后还是不对,就在login函数里加几行日志,帮你排查是哪一步出了问题:// 在查询数据库后加日志,看是否拿到了完整用户数据 const user = result.rows[0]; console.log('从数据库查到的用户数据:', user); // 组装finalResult后加日志 let finalResult = { ...user, token } console.log('要返回给前端的最终数据:', finalResult); res.json({ user: finalResult });然后重启服务,发起登录请求,看控制台的日志:
- 如果
从数据库查到的用户数据里没有username、created_at这些字段,那说明你的数据库查询SELECT * FROM users WHERE email = $1有问题,或者users表本身没有这些字段 - 如果日志里的
要返回给前端的最终数据是完整的,但前端拿到的还是不对,那就要检查是否有中间件(比如响应拦截、格式化的中间件)修改了返回结果
- 如果
安全优化建议(额外提醒)
你的预期输出里包含了password字段,哪怕是加密后的,也不应该返回给前端!建议组装结果的时候把password过滤掉:// 过滤掉password字段 const { password, ...userWithoutPassword } = user; const finalResult = { ...userWithoutPassword, token }; res.json({ user: finalResult });
最后再确认:
如果你按照上面的步骤排查,尤其是重启服务后,代码应该能正常返回你预期的完整用户数据结构啦~
内容来源于stack exchange
相关产品推荐
相关产品推荐

