Dart Shelf Server:如何为指定路由单独应用中间件
在shelf_router中给特定路由添加中间件
你可以通过以下两种常见方式实现仅对指定路由应用auth中间件:
方法一:单独包装需要认证的Handler
直接给需要认证的路由处理器用Pipeline包装,将auth中间件添加到该处理器的调用链中:
final router = Router() ..get('/public', _publicHandler) // 无需认证,直接使用原处理器 ..get('/private', Pipeline() .addMiddleware(auth()) .addHandler(_privateHandler) ); // 仅该路由应用auth中间件 // 全局仍保留logRequests中间件 final handler = Pipeline() .addMiddleware(logRequests()) .addHandler(router.call);
这种方式适合单个或少量需要独立应用中间件的路由,直接在路由注册时完成中间件绑定。
方法二:使用嵌套Router管理认证路由
如果有一组路由都需要认证,可以创建一个子Router,给子Router整体添加auth中间件后再挂载到主Router上:
// 创建需要认证的子路由 final authRouter = Router() ..get('/private', _privateHandler) ..post('/secure-data', _secureDataHandler); // 其他需要认证的路由 // 给子路由绑定auth中间件 final authHandler = Pipeline() .addMiddleware(auth()) .addHandler(authRouter.call); // 主路由整合公共路由和认证路由 final router = Router() ..get('/public', _publicHandler) ..mount('/auth/', authHandler); // 挂载子路由,访问路径为/auth/private等 // 全局中间件 final handler = Pipeline() .addMiddleware(logRequests()) .addHandler(router.call);
这种方式更适合批量管理同类型的路由,让代码结构更清晰,便于后续维护。
内容的提问来源于stack exchange,提问作者Suragch
相关产品推荐
相关产品推荐

