【问题标题】:iron:router wildcard path generating seems to be broken铁:路由器通配符路径生成似乎被打破
【发布时间】:2016-02-15 08:05:40
【问题描述】:

当您在 iron:router 中为流星创建通配符 URL 时,pathFor 模板帮助器以及 Router.go 和 Router.routes[routeName].path() 似乎都被破坏了。

这是我们的路线:

Router.route('/:urlQuery*', function(){
  this.render('ourTemplate');
}, {
  name : 'ourRoute',
});

要访问生成的 url,我们尝试了以下方法:

Router.go('ourRoute', {urlQuery : 'test'});
Router.go('ourRoute', {urlQuery : ['test']});
Router.go('ourRoute', {urlQuery : null});
Router.go('ourRoute', {urlQuery : false});

Router.routes.ourRoute.path({urlQuery : 'test'});
Router.routes.ourRoute.path({urlQuery : ['test']});
Router.routes.ourRoute.path({urlQuery : null});
Router.routes.ourRoute.path({urlQuery : false});

而且 - 当然 - 我们也尝试了 {{pathFor}} 模板助手。

这些代码行中的每一行都会抛出相同的错误:

Uncaught Error: You are trying to access a wild card parameter at index 0 but the value of params at that index is undefined

我在 iron:router 指南中没有找到任何参考资料,所以我的问题是:如何在 Iron:router 中生成一个带有通配符作为参数的 URL?

【问题讨论】:

  • /:urlQuery* 上的 * 是什么意思?我还没有看到,看起来像你的混合参数和正则表达式路径?
  • 这是通配符的符号。因此,例如路由 /test1/test2 将在 urlQuery 参数中保存“test1/test2”。
  • 我以前从未见过。您是否正在考虑正则表达式? stackoverflow.com/questions/27455206/…
  • @ChristianFritz 您可以自己尝试使用 *。在我的示例中使用路由时,您将在 this.params.urlQuery 中获取在此位置传入 url 的所有参数。
  • 我明白了。有趣的。这在某处有记录吗?

标签: meteor iron-router


【解决方案1】:

看起来 Iron Router 使用的是path-to-regexp,但在 Iron Router 中使用时格式有点不同,而且不是很清楚。试试这个...

Router.route('/:urlQuery(.*)', function(){

(.) 将告诉它获取参数名称,并重复 0 次或更多次。只是 urlQuery 打破了我认为的名字,并使其成为正则表达式的一部分。现在,如果您想将多个对象的数组传递给 Router.go,您将遇到另一个问题...

Router.go("our.route", {urlquery: ['test', 'another']});

生成一个如下所示的 URL...

http://localhost:3000/test%2Canother

但这是一个不同的问题,我还没有答案。也许为了在 Router.go 中发送多个,更好的方法是自己连接它们。看起来 Iron 路由器和 path-to-regexp 还没有完全集成?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 2014-04-30
    相关资源
    最近更新 更多