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

如何在Oak/Deno中为路由参数添加扩展名?

解决带参数URL的.rss扩展名路由问题

你的路由配置无法正常工作,核心原因是:tag会匹配包含.在内的任意字符,导致请求时.rss被当成了tag参数的一部分(比如请求/searches/history/tags/node.rss时,tag的值会变成node.rss)。下面是几种可行的解决方法:

方法1:用正则约束参数匹配范围

在路由参数后加上正则表达式,限定tag只匹配不含.的字符,这样就能把.rss从参数里分离出来:

.get(
  "\/searches\/history\/tags\/:tag([^.]+).rss",
  controller.getHistoryByTagRss.bind(controller)
)

这里[^.]+表示匹配任意非.的字符,确保tag参数只取到.之前的部分。

方法2:使用完整正则路由

直接用正则表达式定义整个路由,明确捕获tag部分:

.get(
  /^\/searches\/history\/tags\/([^.]+)\.rss$/,
  controller.getHistoryByTagRss.bind(controller)
)

这种方式下,你需要在控制器里通过req.params[0]来获取tag的值。

方法3:拆分参数与扩展名(通用兼容方案)

把扩展名也设为一个参数,然后在控制器里校验是否为rss:

.get(
  "\/searches\/history\/tags\/:tag.:ext",
  (req, res, next) => {
    if (req.params.ext !== 'rss') return next();
    controller.getHistoryByTagRss.bind(controller)(req, res, next);
  }
)

这种方式更灵活,同时可以过滤掉非.rss的请求。

内容的提问来源于stack exchange,提问作者chovy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 00:20:02