Flutter前端调用Express接口时next()失效,报Cannot POST /userdata错误
问题分析与解决方案
核心问题
你遇到的Cannot POST /userdata错误,根源是前端请求的路由路径与后端定义的受保护路由不匹配:
- 后端受verifyJWT保护的用户数据接口是
/data/userdata(通过app.use('/data', DataRouter)+router.post('/userdata', ...)组合而成) - 但前端实际请求的是
/userdata,这个路径在后端没有对应的路由配置,因此触发404错误。
另外你提到Postman请求/auth/userdata正常,那是因为/auth路由属于未受保护的AuthRouter,和你要调用的受保护/data/userdata是两个完全独立的接口。
修复步骤
修正前端请求URL
将Flutter代码中Uri.parse(userdata)的userdata变量值改为后端受保护接口的完整路径,示例:// 假设后端基础地址是http://localhost:3000,完整路径应为 const String userdata = "http://localhost:3000/data/userdata";确认后端路由逻辑正确性
当前app.js的路由挂载配置是正确的,确保DataRouter确实关联到/data路径:app.use(verifyJWT); app.use('/data', DataRouter); // 此配置会生成完整路由:/data/userdata额外检查项
- 前端请求的
authorizationheader格式正确(你当前代码中的Bearer $token写法没问题) - 确认verifyJWT中间件执行
next()后,请求能正常流转到DataRouter的/userdata路由
- 前端请求的
补充说明
如果你的AuthRouter中也定义了/userdata路由,那是未受保护的测试/备用接口,和受保护的/data/userdata是两个独立接口,不要混淆两者的用途。
内容的提问来源于stack exchange,提问作者AirAmetyst
相关产品推荐
相关产品推荐

