在研究Faclor路由器时,我非常喜欢KeySets的功能,它允许路由在任意组合中匹配一组实体键,但它让我对路由排名感到疑惑。
如果我有路线:"titlesById[{integers:titleIds}]['name','year']"
和另一条路线:"titlesById[{integers:titleIds}]['name']"
当我只请求name
密钥时,Falcor路由器如何确定使用哪条路由。我担心的是,当访问多个密钥而不是单个密钥时,您可能有更高效的数据访问策略。
答案 0 :(得分:2)
是和否。
它实现了路由优先级,意思如下:
具体键:4 整数/范围:2 键:1
因此['name', 'year']
和['name']
的优先级相同。
但是您的规格存在问题。路由器不允许匹配相同路径的相同优先级路由。因此,以下路径优先于等效,因此在路由器构建时会产生错误。
{ route: 'titlesById[{integers:titleId}].name', get: ... },
{ route: 'titlesById[{ranges:titleId}].name', get: ... },
...
这会抛出一个错误,因为范围和整数都匹配同一组传入数据(数字),并且它们都匹配相同的路径(titlesById,数字,名称)。这扩展到您的示例,您有两条匹配相同路径的路由,这不可能发生(当然,除非一条路由与get
处理程序匹配,另一条路由与set
处理程序匹配)。