kaojs 架构,读取 mysql 的 json 类型字段的时候,能否自动转换成 json 类型,而不是 string 类型? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
skyworker
V2EX    Node.js

kaojs 架构,读取 mysql 的 json 类型字段的时候,能否自动转换成 json 类型,而不是 string 类型?

  •  
  •   skyworker 2018-02-23 11:02:50 +08:00 5495 次点击
    这是一个创建于 2859 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前有个系统,架构是 koa+mysql(历史原因,没有使用 mongdb),为了便于扩展,mysql 表里面用了很多类似名为 detail/tags 的 json 类型字段.

    例如有个 users 表,包含了 tags 字段,保存该用的额 tag, 例如['可爱','型男','80 后']等数据.在 koa 读取这个用户的时候:

    const user = await this.model('users').where({id: 1}).find();

    读取的结果,user.tags 是一个 string 类型的值,而不是标准的 json array. 当然手工可以转换成 json,但是如果字段多的话,就会很累.

    刚刚接触 nodejs,不知道有没有自动化的处理方法,让框架能自动识别 model 中的 json fields 类型,自动转换成 json 类型?

    第 1 条附言    2018-02-23 11:43:11 +08:00
    PS: 在 users 表中, tags 是一个 mysql 支持的新的 json 类型的 field, 而不是 varchar 类型或 text 类型
    8 条回复    2018-03-03 16:15:06 +08:00
    noe132
        1
    noe132  
       2018-02-23 11:13:41 +08:00 via Android
    自己写中间件转换呗。。。mysql 和 node 又不知道你的 string 是不是合法的 json string,mysql 也没有 json 这个类型
    skyworker
        2
    skyworker  
    OP
       2018-02-23 11:17:07 +08:00
    @noe132 mysql 5.7 已经支持 json 类型的字段了不过不支持索引,并且提供的有 json 相关的函数, 用起来还可以.
    zenxds
        3
    zenxds  
       2018-02-23 13:33:16 +08:00
    model 里面写 getter 吧
    feichao
        4
    feichao  
       2018-02-26 01:30:59 +08:00
    暴力一点的方法可以 hack 一下原型链,找到 find 方法对应的造函数,然后在原型上添加一个方法,大概就像这个样子:
    XXX.prototype.findAndCOnvertToArray= async function () {
    const stringValue = await this.find()
    return JSON.parse(stringValue)
    }
    feichao
        5
    feichao  
       2018-02-26 01:33:08 +08:00
    在原型链上添加方法之后就可以像 find 一样调用 findAndConvertToArray 方法了。不过记得给新增的方法加上注释,防止别人不理解。
    skyworker
        6
    skyworker  
    OP
       2018-02-26 10:10:16 +08:00
    @feichao 是的,目前采用的就是这种办法. 原以为 koajs 之类的框架,应该有自动 convert 的 feature,看来没有了
    vcfvct
        7
    vcfvct  
       2018-03-03 14:08:37 +08:00 via Android   1
    可以看看 typeorm 里有没有好的方案,converter 或者 mapper 之类的。
    skyworker
        8
    skyworker  
    OP
       2018-03-03 16:15:06 +08:00
    @vcfvct 多谢 我们看下, 和 Laravel 的 Doctrine 还是比较类似的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     951 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 20:04 PVG 04:04 LAX 12:04 JFK 15:04
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86