问题描述
使用hexo-admin发现一个问题,修改了文章类型,写入到md文件中,会将true和false改成字符串存入,还会加上引号,这导致了这个字段在后期处理上始终是true
怎么解决
先分析一下:top本来字段应该是布尔,这里文章内直接变成了字符串,而在hexo -g 生成静态页的时候,只要top后面有字符串就是true。
打开 hexo-admin模块,找到了update.js文件
看到36行-39行,作用是读取config配置文件,将里面写的合并到默认的字段。没有关于字段类型的描述,看不出什么端倪,只能去页面上找找线索。
转到页面上,发现api接口上传的字段类型就是string,那么就想找到修改的页面,在里面更改一下字段类型
但是没有想到,作者只保留了打包后的文件,并没有源文件,使得没法修改,只能另外想办法
可以考虑的是,在后端接口处,拦截到post更改的字段,当字符串==’true’时,字段改为true,当字符串==’false’时,改为false,找到相关接口文件api.js,
看到页面请求时最后一个字段是文件id之类的东西,尝试着在api.js中找到相应描述,在第315行,对应post方法,但是后面直接next()函数,我们再看看上层是怎么调用的
在index.js中引用了api.js
啥也没有,还是回到api.js看一下,发现next()下面还有一段更新的操作
既然update里面传入了req.body,那么在之前先轮询一遍,如果字段值是字符串’true’或’false’,就改为布尔值。
Object.keys(req.body).forEach(key => {
// console.log(key, person[key]);
if(key === 'top' || key === 'cover' ){
req.body[key] = req.body[key] === 'true'
}
})
重启hexo-admin,测试一下
传参是string
响应是布尔值,这就成功了
bug修复(完)