使用Express.js访问路径中的URL参数

时间:2016-07-20 13:33:26

标签: node.js express routes

在我的路由目录中,有一个节点和Express.js网络应用程序,我有以下代码:

var router = express.Router();

router.get(htmlExt('index/:fileName'), function(req, res){
  console.log(req.params.fileName);
});

但是,req.params.fileName仅返回:fileName的第一个字母。我已多次检查我的代码,但我找不到这个有什么问题。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

好的,这就是我认为发生的事情:

  1. /index/:fileName
  2. 开始
  3. htmlExt将其转换为/index/:fileName|index/:fileName.html
  4. Express路由器使用它来创建正则表达式/^\/index\/([^\/]+?)|index\/([^\/]+?)\.html(?:\/(?=$))?$/i
  5. 由于没有分组来指示管道应用的模式,因此表现为匹配“/^\/index\/([^\/]+?)/i /index\/([^\/]+?)\.html(?:\/(?=$))?$/i
  6. 管道前的模式满足表达式。由于它以懒惰的比赛结束,并且不再需要(?:\/(?=$))?$,因此很乐意仅匹配该匹配组中的第一个字符。
  7. 我使用Express Route Tester来了解生成正则表达式的样子。 (注意:该工具实际上并不支持Express路由器的模式匹配部分,因此我必须在下一步中完成一点点捏造(我从管道前移除了逃逸) )。

    然后我使用https://regex101.com/r/kN5kW9/1来弄清楚目标是什么。