求推荐个 Node.js 的 orm 轮子,看轮子都看花眼了 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
Smash
V2EX    程序员

求推荐个 Node.js 的 orm 轮子,看轮子都看花眼了

  •  1
     
  •   Smash 2021-08-10 21:09:56 +08:00 8299 次点击
    这是一个创建于 1528 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前几天重构了一个开源的项目,还是 golang 好,orm 部分可供我选择得有限.

    今天又想重构多年前读大学时写的一个小项目(当时还是 Vue+Laravel5 写的)

    想试试 next.js+react 来写,用 docker 部署,可以实现一下服务端渲染,但是需要一个后端的 orm.

    但是这 orm 轮子太多了,着实给我看花眼了.

    一定要支持 Typescript 的类型提示的,如果轮子是纯 Typescript 写的就更好了.

    38 条回复    2023-10-08 06:17:42 +08:00
    wszgrcy
        1
    wszgrcy  
       2021-08-10 21:13:33 +08:00   1
    typeorm
    Smash
        2
    Smash  
    OP
       2021-08-10 21:16:36 +08:00
    @wszgrcy #1 为什么我 github 首页搜索 orm,过滤 typescript,居然没在第一页
    des
        3
    des  
       2021-08-10 21:25:38 +08:00 via iPhone   1
    prisma
    randomboi
        4
    randomboi  
       2021-08-10 21:39:57 +08:00   1
    prisma yyds
    Cbdy
        5
    Cbdy  
       2021-08-10 21:48:53 +08:00 via Android   1
    Sequlize
    SolidZORO
        6
    SolidZORO  
       2021-08-10 22:01:26 +08:00 via iPhone   5
    推荐 Sequelize,TS 也有对应版本,nest 也有官方的 plugin 。

    TypeORM 深度用过,坑十分多,而且新版本难产,repo 不活跃,文档几乎等于没有,差不多有问题都要翻源码解决。

    另外就是 prisma 刚用起来会比较兴奋,但…… 该有的问题还是有,而且还多了一层。

    看楼主之前用 Laravel,可以很负责的和你说,node 没有一个 ORM 可以和 Eloquent 抗衡,是的哪怕是 Sequelize 也不行,S 的代码量基本是是 E 的两倍以上,如果涉及到 MM 表那就更长了。

    个人很喜欢 Laravel,主要是喜欢他的 ORM Eloquent,只可惜 PHP 强类型还不堪用,并且一些业务要使用 Eletron,才勉为其难的使用上了 nest + Sequelize 。
    DaTuDou
        7
    DaTuDou  
       2021-08-10 22:22:40 +08:00   1
    Prisma + 1
    yoa1q7y
        8
    yoa1q7y  
       2021-08-10 22:33:13 +08:00
    @des #3
    @randomboi #4 看了下 prisma 的 open issues 有 1200+
    joyqi
        9
    joyqi  
       2021-08-10 22:40:27 +08:00
    一直用 Sequlize
    mscststs
        10
    mscststs  
       2021-08-10 23:54:41 +08:00
    ORM 简直深坑,现在顶多用 Knex 做一下语法辅助。
    kiddyu
        11
    kiddyu  
       2021-08-11 00:19:21 +08:00
    @SolidZORO #6 adonisjs 不知道怎么样
    SolidZORO
        12
    SolidZORO  
       2021-08-11 00:48:04 +08:00 via iPhone
    @kiddyu 不大行。和 Laravel 差距太大,虽然一整套范式给你约定好了,可惜 node 这边没有能打的 ORM 。他那边封装 knex 的 lucas (应该是叫这个吧?)比较拉垮。


    其实这些单一好与坏都可以弥补,比如 ORM,没有?那花时间肯定可以写个巨牛逼的出来,但自己一个人造轮子不行啊,还得搞生态。生态太重要了。

    PHP 那海量且久经考验的 composer 库是非常厉害的,这个 node 实在比不了,不是质量不质量的问题就是整个社区风气的问题。node 这边的人倾向造轮子,什么不好就造,造完版本号 0.0.x 还没用完就弃了。

    如果没弃,就搞断崖式 BC,本来有点生态的,这一弃全没了。经常可以看到有些 lib 的 plugin 对标的不是 2.x.x 这种大版本而是 2.2.x 这个级别的版本。

    感觉扯远了,回到正题。现在是 2021 年,node 这边基本可以确定只剩 nestjs 和 express 两个选择了,实在想要性能还多个 fastify 可以选。别的就算了。
    mufeng
        13
    mufeng  
       2021-08-11 08:50:47 +08:00 via iPhone
    Sequlize +1
    jawilx
        14
    jawilx  
       2021-08-11 09:05:05 +08:00
    Sequlize
    mywaiting
        15
    mywaiting  
       2021-08-11 09:14:06 +08:00
    感觉简单写个自己的 SQL CURD 的操作封装就好了,没有必要上 ORM 这一套吧

    感觉还是自己手撸原生 SQL 语句最舒服,用了 ORM 的话,它自己定义的语法我还得学一遍
    hafung
        16
    hafung  
       2021-08-11 09:31:12 +08:00
    eloquent 真的太强了!
    有人说不用 ORM 写原生 sql 的,是没写过大项目或者没有重构过吗? sql 到后期根本无法维护
    code4you
        17
    code4you  
       2021-08-11 09:32:38 +08:00
    Prisma + 1 主要是网站和 studio UI 好看 虽然 issue 1k+
    hawei
        18
    hawei  
       2021-08-11 09:47:45 +08:00
    应该用 graphQL 的那套,很快很强大
    keepeye
        19
    keepeye  
       2021-08-11 09:48:40 +08:00
    在 eloquent 面前,go 的几个 orm 也不能打
    xd547
        20
    xd547  
       2021-08-11 10:29:57 +08:00
    Prisma
    4771314
        21
    4771314  
       2021-08-11 10:39:17 +08:00
    @SolidZORO typeorm 的坑是有点多
    EPr2hh6LADQWqRVH
        22
    EPr2hh6LADQWqRVH  
       2021-08-11 10:45:38 +08:00
    小项目根本别用 SQL 数据库,mongodb 不香吗,为什么虐自己

    大项目的那个投入和工程师能力,自己写个适合的数据层,靠谱可控
    lbunderway
        23
    lbunderway  
       2021-08-11 10:51:51 +08:00
    sequelize 应付 crud 完全没问题,复杂的数据统计还是要原生 sql
    L1shen
        24
    L1shen  
       2021-08-11 11:45:54 +08:00
    简单的直接写 knex 也挺好的
    xieren58
        25
    xieren58  
       2021-08-11 12:09:55 +08:00
    Prisma + 1
    randomboi
        26
    randomboi  
       2021-08-11 13:13:55 +08:00
    @SolidZORO adonis 可以的,你用过新版吗
    inhal
        27
    inhal  
       2021-08-11 13:20:15 +08:00
    前两周试了下 Adonis 5,有 Laravel 的感觉,更早版本没用过。
    Smash
        28
    Smash  
    OP
       2021-08-11 13:38:10 +08:00
    @inhal #27 支持服务端渲染吗?还是一个纯 server 侧的框架
    wowbaby
        29
    wowbaby  
       2021-08-11 14:28:09 +08:00
    @SolidZORO 同意,前端更新太快,还要各种兼容,轮子太多五花八门,一句话真 TM 累!每次做项目 70%的时间是在搞前端。
    dream4ever
        30
    dream4ever  
       2021-08-11 15:03:11 +08:00
    @Smash GitHub 的搜索结果默认是按照“Best match”排序的,你切换成按照“Most stars”排序,typeorm 就排第一了。
    dream4ever
        31
    dream4ever  
       2021-08-11 15:10:17 +08:00
    @yoa1q7y
    @code4you
    看了看 typeorm,prisma,sequelize,这三个 repo 的 issues 都是 1200+、1300+,哈哈
    inhal
        32
    inhal  
       2021-08-11 22:33:29 +08:00 via Android
    @Smash 抱歉,我只试写了一下 server api,无法回答这个问题。
    for8ever
        33
    for8ever  
       2021-08-12 09:57:22 +08:00
    推荐 prisma,最近正在使用
    Smash
        34
    Smash  
    OP
       2021-08-13 10:53:49 +08:00
    试用了 Prisma 回来了,给我一种熟悉的体验,这不就根据 schema 文件,生成对应的 orm 代码直接使用吗?

    现在很多库都是这种元编程的模式来生成对应的代码,之前写 Android 的时候用过的 Glide,Dagger2

    写 Golang 的时候用过的 facebook 的 ent.

    缺点就是要多包一层.
    XCFOX
        35
    XCFOX  
       2021-09-13 00:08:45 +08:00
    提名 mikro( https://mikro-orm.io/) 一下,比 TypeOrm 强在隐式事务、自带请求作用域
    ed0522
        36
    ed0522  
       2023-10-07 14:30:16 +08:00
    这三个问题都不少,至少 Sequelize 和 typeorm 文档目录清晰一些,sequelize 最老,可能沉淀的好一些。
    ed0522
        37
    ed0522  
       2023-10-07 14:31:29 +08:00
    @ed0522 Prisma 我遇到好多问题,从安装到使用,听说融资 4000 万 USD 。。。
    LEFT
        38
    LEFT  
       2023-10-08 06:17:42 +08:00 via iPhone
    sequelize 的事务贼难用
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2773 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 40ms UTC 14:26 PVG 22:26 LAX 07:26 JFK 10:26
    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