最近找了一圈,没有一个好的crud,大家有啥好推荐吗?
发布于 1 年前 作者 i5ting 4754 次浏览 来自 分享

技术栈 1、mysql 2、react 3、node框架(koa、fastify,midway)

cool-admin我看过。其他,大家有啥好推荐吗?

接下来打算基于midway,这样做。

@Controller("/posts")
@Crud()
export class PostController extends BaseController<PostService>{

}
9 回复

是的,node生态没有好用的crud,我找了半年也没找到好用的,最终我是选择了golang的pocketbase,鼠标点点API就生成好了,而且后台管理界面也挺好使的,美中不足的是它只支持SQLite,虽然它不支持你要求的MySQL,但我还是强烈建议你尝试下,因为我用它开发原型产品很舒服,速度也快 后面假设用户量上来了之后我也不打算换掉它,而是直接在它和MySQL之间做一层同步,内容管理用它编辑好后同步到MySQL

@shynome 当然也可以一起写一下

https://github.com/zy445566/query-build 这个是sql拼合工具类似mybatis,具体底层什么驱动可以不关心,有ORM的优点也有SQL的灵活性 目前公司node侧很多服务用了,评价挺高的,简单好用方便轻量

@zy445566 跟 knex.js 比有啥优势?

@whinc knex.js总体还属于ORM,我这款会更加轻量,然后语法会更加有趣,比如可以这样用

queryBuild.merge(
    'SELECT * FROM users WHERE', //字符串混写
    {
        sql:'name = ? AND age = ?', // 这就是sqlbind
        bind:['jack', 20]
    }
    'AND','(',queryBuild.where({vip:1,group:'admin'},Connect.or),')', // ORM混写
    'AND',queryBuild.where({
        id:{[Op.in]:[1,2,3]}
    }),
    'AND',queryBuild.where({
        type:{[Op.sqlBind]:{
            sql:'type=1',
            bind:[]
        }}
    }),
    'GROUP BY order' // 复杂SQL包括join都可以直接使用字符串混写
)

/** 上面的最终结果就是下面
output:
{
    sql: 'SELECT * FROM users WHERE name = ? AND age = ? AND ( vip = ? OR group = ? ) AND id IN (?, ?, ?) AND type=1 GROUP BY order',
    bind: [ 'jack', 20, 1, 'admin', 1, 2, 3 ]
}
**/

这里有一个核心理念就是sqlbind,可以ORM和字符串当最终就是生成一个sqlbind,sqlbind也可以写在中间,最终sqlbind交给sql执行器去执行就好。 可能比传统的ORM直接优势就是基于底层sql,sql性能优化方便,容易学习,高度灵活。

@zy445566 knex.js 只是个 query bulder ,你上面的例子knex.js 也很容易实现,也支持混合原生sql,没看出优势

knex.select(’*’).from(‘users’).where({ name: ‘jack’, age: 20})

@whinc 这个东西仁者见仁智者见智,主要看个人喜好了

typeorm 怎么样

回到顶部