技术栈 1、mysql 2、react 3、node框架(koa、fastify,midway)
cool-admin我看过。其他,大家有啥好推荐吗?
接下来打算基于midway,这样做。
@Controller("/posts")
@Crud()
export class PostController extends BaseController<PostService>{
}
是的,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 怎么样