Express.js+Nodemon中使用JWT的req.user导致应用崩溃
Typescript + Express 中使用 req.user 导致 nodemon 崩溃的问题
昨天开始遇到一个棘手问题,尝试多种方案都没解决。我用Typescript开发Express应用,nodemon启动开发服务器,之前一切正常,直到实现了一个需要req.user.id的路由——现在只要代码里用到req.user的地方,nodemon就会崩溃,提示:
"[nodemon] app crashed - waiting for file changes before starting..."
代码详情
测试控制器(src/controllers/profileControllers.ts)
这是一个简化的测试函数,但问题依然存在:
export const testUserProperty = async (req: Request, res: Response) => { try { if (!req.user || !req.user.id) { return res.status(401).json({ error: 'Utilisateur non authentifié.' }); } const userId = req.user.id; const user: IUser | null = await User.findById(userId).select('-password'); if (!user) { return res.status(404).json({ error: 'Utilisateur non trouvé.' }); } res.status(200).json(user); } catch (error) { res.status(500).json({ error: 'Erreur lors de la récupération du profil.' }); } };
路由配置(src/routes/profileRoutes.ts)
router.get('/profile', authenticate, testUserProperty);
所有模块均已正确导入。
JWT生成逻辑(src/controllers/authController.ts)
登录时生成token,确认token包含userId和email:
const token = jwt.sign( { userId: user._id, email: user.email }, process.env.JWT_SECRET as string, { expiresIn: "1h" } );
认证中间件(src/middlewares/authMiddleware.ts)
export const authenticate = (req: Request, res: Response, next: NextFunction) => { const authHeader = req.header("Authorization"); const token = authHeader && authHeader.split(" ")[1]; if (!token) { return res.status(401).json({ message: "Accès refusé, token manquant." }); } try { const decoded = jwt.verify(token, process.env.JWT_SECRET as string) as { userId: string, email: string }; req.user = { id: decoded.userId, email: decoded.email }; if (!req.user || !req.user.id) { return res.status(401).json({ error: 'Utilisateur non authentifié.' }); } next(); } catch (error) { res.status(401).json({ error: "Token invalide" }); } };
Typescript全局类型定义(types/global.d.ts)
为扩展Express的Request接口添加了全局类型:
declare namespace Express { export interface Request { user?: { id: string; email: string; }; } }
tsconfig.json中已配置"include": ["src", "types"]。
已尝试的方案
- 反复检查代码逻辑,未发现明显错误
- 咨询过GPT 4o和GPT o3_mini_high,未能解决
- 尝试在控制器中使用继承自Request的自定义接口,问题依旧
- 将所有
req.user替换为req.body.user测试,服务器运行完全正常,确认问题与req.user的使用直接相关
求助方向
希望能得到排查方向或解决方案,如需更多信息可随时提供,也欢迎有相同问题的开发者一起探讨。
内容的提问来源于stack exchange,提问作者Guillaume D.
相关产品推荐
相关产品推荐

