文章寻址问题
2018年05月27日

概述

刚才发现一个bug,在访问博客时有一篇明明在索引列表可以看到,但是明细页却无法找到.
跟踪原因,发现处在noteinfo获取上,这片文章使用了title转义.索引缓存中包含这个title的文章,但是路径不匹配.
索引中的路径和要访问的路径区别如下.

索引中路径:/aa/bb/cc
请求的路径:/aa/bb/cc/

这问题起初没有发现,也是一个巧合.
API返回的路径不包含末尾的/,而作为请求路径/,他的dirname也只能是/
例如:

path.dirname('/aa/file1.log');
// 输出 /aa

path.dirname('/file2.log');
// 输出 /

如果文章在子目录,这个问题就不会出现,join方法会自动解决路径分隔符问题.而对于/路径的拼接,就不一样了,join会直接怼到前边的路径上.最终导致BUG的出现.

解决办法

解决办法也很简单,去掉末尾的/就可以,这个问题虽然很简单,但是还是暴露出一些问题.

  1. 我对node API掌握不够充分
  2. 新轮子调试检测不足
  3. node如果像C#那样,一切皆对象就好了
    试想一下:
var path1 = new Path('/aa/bb/cc/');
var path2 = new Path('/aa/bb/cc');
path1.parent == path2.parent;
// 输出 true  (两个parent属性也是Path对象).