V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Smash
V2EX  ›  程序员

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

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

    前几天重构了一个开源的项目,还是 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
    xujiahui
        14
    xujiahui  
       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   ·   实用小工具   ·   1013 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 20:06 · PVG 04:06 · LAX 12:06 · JFK 15:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.