You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 21:35:58