修改metadata字段类型--优化hexo-admin插件


问题描述

使用hexo-admin发现一个问题,修改了文章类型,写入到md文件中,会将true和false改成字符串存入,还会加上引号,这导致了这个字段在后期处理上始终是true

问题

怎么解决

先分析一下:top本来字段应该是布尔,这里文章内直接变成了字符串,而在hexo -g 生成静态页的时候,只要top后面有字符串就是true。

打开 hexo-admin模块,找到了update.js文件

update.js

看到36行-39行,作用是读取config配置文件,将里面写的合并到默认的字段。没有关于字段类型的描述,看不出什么端倪,只能去页面上找找线索。

转到页面上,发现api接口上传的字段类型就是string,那么就想找到修改的页面,在里面更改一下字段类型

页面请求

但是没有想到,作者只保留了打包后的文件,并没有源文件,使得没法修改,只能另外想办法

打包后无法更改

可以考虑的是,在后端接口处,拦截到post更改的字段,当字符串==’true’时,字段改为true,当字符串==’false’时,改为false,找到相关接口文件api.js,

api.js

更改后触发请求

看到页面请求时最后一个字段是文件id之类的东西,尝试着在api.js中找到相应描述,在第315行,对应post方法,但是后面直接next()函数,我们再看看上层是怎么调用的

api.js

在index.js中引用了api.js

index.js
啥也没有,还是回到api.js看一下,发现next()下面还有一段更新的操作

api.js
既然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'
    }
})

api.js
重启hexo-admin,测试一下

传参是string

重启后前端传值

响应是布尔值,这就成功了

成功

bug修复(完)


文章作者: 无名小卒
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 无名小卒 !
  目录