对Express有研究的,我有个问题请教下
看了下路由的代码, 都是用正则匹配的。 起初我以为对于字符串模式,比如 get(’/abc/def’ , function(req,res){}); 会采取字符串比较来判断,然而我错了。 不是很明白为什么字符串模式还要用正则???
另外,有没有路由缓存这一说?就是基于同一个uri,做一级缓存,减少路由匹配的时间损耗。
2 回复
为了代码通用化。
app.get('/abc/def', ->)
app.get('/abc/:name', ->)
后者是肯定需要用正则的,如果前者用了字符串模式匹配的话,由于后者与前者有按顺序判断的需求。这时代码就复杂了。 我们有项目由于 route 太多而导致这种正则匹配的效率太低,使用了自己写的 route。https://github.com/tianmo/h-router 。 对于普通应用,没必要关心这块的效率
@alsotang 还是有区别的,我也想自己写路由,全部用字符串,一切参数放到http参数里, 这样才更符合rest作者那个论文所说的东西。
====== 我看了express4那个路由,这个路由表是有预处理的, 既然这样,可以在这一步标记一下这层采取 字符串还是正则, 就是说那个next里都有自己的匹配方式。