V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
BeijingBaby
V2EX  ›  Node.js

2024 年了,写后端 API Node.js 生态用哪个框架?

  •  
  •   BeijingBaby · 2024-08-21 20:59:57 +08:00 · 12811 次点击
    这是一个创建于 377 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前端 next.js ,但是写后端还是很不足了。

    92 条回复    2024-11-04 12:27:56 +08:00
    donaldturinglee
        1
    donaldturinglee  
       2024-08-21 21:02:43 +08:00
    看你用什么前端框架吧。React 一把梭就 next.js ,Vue 一把梭就 Nuxt.js
    magicflower
        2
    magicflower  
       2024-08-21 21:07:10 +08:00 via Android
    nextjs 可以直接写后端接口,也可以用 nestjs 。
    reDesign
        3
    reDesign  
       2024-08-21 21:09:51 +08:00 via iPhone
    我选择 nextjs ,写接口挺方便的。https://github.com/TobeBetterV/Moments
    limars
        4
    limars  
       2024-08-21 21:17:46 +08:00
    是要比较复杂的那种后端框架吗? nestjs 吧。
    momo2789
        5
    momo2789  
       2024-08-21 21:37:57 +08:00
    我宁愿 Koa 也不用 next ,Java 味太浓,不是 js 的最佳实践
    lucasj
        6
    lucasj  
       2024-08-21 21:47:50 +08:00
    - Express.js
    - Koa.js
    - Nest.js
    - Next.js (React)
    - Nuxt (Vue)
    WhateverYouLike
        7
    WhateverYouLike  
       2024-08-21 21:49:21 +08:00 via iPhone
    显然你看岔了 next 和 nest
    @momo2789
    WhateverYouLike
        8
    WhateverYouLike  
       2024-08-21 21:54:07 +08:00 via iPhone   ❤️ 3
    Hono 或者 Fastify 。Hono 挺时髦的,但是第一支持对象是 Deno ,放在 Node 上运行性能肯定比不上 Fastify
    WhateverYouLike
        9
    WhateverYouLike  
       2024-08-21 21:55:01 +08:00 via iPhone
    其次还有 hapi ,nitro 可供选择
    jiangzm
        10
    jiangzm  
       2024-08-21 21:59:46 +08:00   ❤️ 1
    首先排除这两个, 什么玩意。SSR 绝大部分是伪需求
    Next (React)
    Nuxt (Vue)

    使用基础级框架就选
    Express
    Koa

    使用企业级框架就选
    Nest
    Egg
    Midway (阿里开源的没有 Egg 那么重,和 nest 类似)
    GG668v26Fd55CP5W
        11
    GG668v26Fd55CP5W  
       2024-08-21 22:01:51 +08:00 via iPhone
    @momo2789 那个明明是 PHP 味…
    onichandame
        12
    onichandame  
       2024-08-21 22:08:15 +08:00
    简单才是硬道理。直接从 express/koa 入手,各种业务逻辑和中间件设计得优雅一点,以后迭代得更复杂了随时可以切到 nest/midway
    momo2789
        13
    momo2789  
       2024-08-21 22:13:27 +08:00
    @WhateverYouLike 谢谢,确实看错了,23333
    XCFOX
        14
    XCFOX  
       2024-08-21 22:32:11 +08:00   ❤️ 4
    tRPC 简单但严谨
    https://trpc.io/
    horizon
        15
    horizon  
       2024-08-21 22:47:47 +08:00   ❤️ 1
    写后端咋不足了
    nodesolar
        16
    nodesolar  
       2024-08-21 23:02:17 +08:00
    nestjs 还可以 用过
    qingshui33
        17
    qingshui33  
       2024-08-21 23:25:22 +08:00
    喜欢 Java Spring 的可以用 nestjs ,喜欢 PHP Laravel 的可以选择 AdonisJS
    yafoo
        18
    yafoo  
       2024-08-21 23:57:59 +08:00 via Android
    @qingshui33 喜欢 thinkphp 的,可以试试我的 jj.js
    cat
        19
    cat  
       2024-08-22 01:34:59 +08:00
    @WhateverYouLike 投 Fastify 一票,玩熟了特别爽
    IvanLi127
        20
    IvanLi127  
       2024-08-22 01:54:03 +08:00   ❤️ 2
    2024 ? hono.js

    fastify 和 hono.js 写简单的不错
    复杂的 NestJS 。

    愿意上更可靠的类型安全,推荐捆上 trpc 。
    dartabe
        21
    dartabe  
       2024-08-22 03:21:16 +08:00
    Express / routing-controllers
    289396212
        22
    289396212  
       2024-08-22 04:47:27 +08:00
    请教一下,怎么让 nodejs api 里用 swagger 的时候增加一个接口自动出现在 swagger 上,而不是要自己写一个注释文件
    dj721xHiAvbL11n0
        23
    dj721xHiAvbL11n0  
       2024-08-22 08:27:57 +08:00
    2024 我更推荐 astro+你喜欢的( nest+express+koa )
    ixixi
        24
    ixixi  
       2024-08-22 08:38:24 +08:00
    试下 strapi 代码都不用写了
    dream4ever
        25
    dream4ever  
       2024-08-22 08:47:00 +08:00
    @ixixi 哈哈,我就在用,挺省心的,适合工作前端方面比较重的。后来又看很多人说 Supabase 也不错,后面有机会了打算也试试,看看哪个更好。
    echoless
        26
    echoless  
       2024-08-22 09:17:55 +08:00
    @289396212 #22 搜了一下 https://github.com/fastify/fastify-swagger

    python 的 fastapi 已经自带了
    seu
        27
    seu  
       2024-08-22 09:19:48 +08:00
    fastify 够用了 性能也够
    CodeCodeStudy
        28
    CodeCodeStudy  
       2024-08-22 09:22:44 +08:00
    肯定是 Midwayjs 啊,用 TypeScript 写的,入门简单,功能丰富。
    Express, Koa 太简单了,功能少。Eggjs 功能多些,但是是用 Javascript 写的。
    Charkey
        29
    Charkey  
       2024-08-22 09:26:29 +08:00
    @reDesign 看着不错,文章|闲聊|关于我还能歪来歪曲跟着鼠标焦点
    guguji5
        30
    guguji5  
       2024-08-22 10:38:11 +08:00
    我用 express+express-graphql 写了个 graphql 的 api ,有个接口 3 秒才返回,而且我还不知道怎么查。无语了(能打印时间戳的地方都打了,都是毫秒级别的)
    flmn
        31
    flmn  
       2024-08-22 10:41:08 +08:00
    如果简单的要性能,看看 bun+hono

    trpc 不推荐
    wu67
        32
    wu67  
       2024-08-22 11:02:27 +08:00   ❤️ 2
    koa 或者 express , 另外个人建议, 远离阿里 kpi 产物
    IamUNICODE
        33
    IamUNICODE  
       2024-08-22 11:47:04 +08:00
    原生保守点还是 express 和 koa ,ts 就是行 nest.js 好啦
    suyuyu
        34
    suyuyu  
       2024-08-22 11:54:31 +08:00
    hono
    meteor957
        35
    meteor957  
       2024-08-22 12:13:49 +08:00 via Android
    koa 没毛病
    seekafter
        36
    seekafter  
       2024-08-22 12:19:31 +08:00
    React 一把梭就 next.js ,Vue 一把梭就 Nuxt.js
    我就在用 nuxt 写后端.不要 ssr 关闭就行了,能增删改查就行呗
    superhot
        37
    superhot  
       2024-08-22 12:21:03 +08:00 via Android
    @flmn 能否说说推荐与不推荐的理由?
    oatw
        38
    oatw  
       2024-08-22 13:34:39 +08:00
    一定要 node 吗?用下来感觉 node 写后端就是个笑话。
    kuxuan
        39
    kuxuan  
       2024-08-22 13:44:43 +08:00
    koa
    wetist
        40
    wetist  
       2024-08-22 13:45:56 +08:00
    排除 egg ,不怎么维护了已经
    me1onsoda
        41
    me1onsoda  
       2024-08-22 13:58:16 +08:00
    @oatw 比如说?
    yozoh1163
        42
    yozoh1163  
       2024-08-22 14:33:01 +08:00
    headless 可以试试 directus ,另外 hasura 也很赞,个人使用 midwayjs 多一点
    zhangkai1024
        43
    zhangkai1024  
       2024-08-22 14:44:36 +08:00
    nestjs 复杂 但 强大。
    strapi 简单 headless CMS 应用场景窄了点
    galikeoy
        44
    galikeoy  
       2024-08-22 14:48:27 +08:00
    @oatw #38 怎么说?
    libook
        45
    libook  
       2024-08-22 15:13:31 +08:00
    一两个 API 的话直接用 Node 的原生 API 手写也可以。

    API 多了看项目适合哪种架构。

    我一般习惯 koa ,比较灵活。
    17681880207
        46
    17681880207  
       2024-08-22 15:13:49 +08:00
    我自己会首先排除 nest.js...😗
    fox2081
        47
    fox2081  
       2024-08-22 15:59:13 +08:00
    koa 或 express + tsoa ,自动生成 OpenAPI 规范的配置和前端请求客户端,前后端都用 TS 的话会很舒服
    yhxx
        48
    yhxx  
       2024-08-22 16:03:53 +08:00
    我前些天也在纠结这个,看了一圈之后决定还是用 egg 了。。。
    这楼里居然没有一个提到 egg 的,已经凉了吗
    yhxx
        49
    yhxx  
       2024-08-22 16:04:13 +08:00
    哦看到了,还是有人提的
    RoshanWu
        50
    RoshanWu  
       2024-08-22 16:06:32 +08:00
    用的自己基于 koa 封装的。
    oatw
        51
    oatw  
       2024-08-22 16:11:59 +08:00
    @me1onsoda #41
    @galikeoy #44

    umm.. 就是对比下来感觉 node 框架的提供的特性不够丰富,跟玩具一样。比如 Koa vs Ruby on Rails 。TJ 和 DHH 还在 twitter 上就 orm 的设计 battle 过,也许设计哲学不一样,不过我是站 DHH 的,因为不想自己瞎 jb 折腾拼包,累。
    92van
        52
    92van  
       2024-08-22 16:14:55 +08:00
    nestjs 很舒服😁
    mark2025
        53
    mark2025  
       2024-08-22 16:59:23 +08:00
    @jiangzm egg 团队都已经解散没人维护了,不推荐。 推荐 midway ,TS 写得很顺滑,各种组件也很丰富,并且也不是 kpi 项目。
    mark2025
        54
    mark2025  
       2024-08-22 17:01:02 +08:00
    @yhxx egg 团队早已解释,项目已经凉了。并且 egg 一直对 TS 支持很差, 尤其是写插件的时候(多 worker 也导致很不好调试)
    mark2025
        55
    mark2025  
       2024-08-22 17:02:26 +08:00
    @oatw 没写过的人评价笑话才是笑话
    mark2025
        56
    mark2025  
       2024-08-22 17:03:27 +08:00
    xctcc
        57
    xctcc  
       2024-08-22 17:06:05 +08:00
    我的个人项目用的 eggjs ,几年下来已经屎山了,不过无所谓,随便写
    abelmakihara
        58
    abelmakihara  
       2024-08-22 17:52:14 +08:00
    有 nextjs 不用的话 正儿八经的后端 nestjs 脚本级的接口 koa
    horizon
        59
    horizon  
       2024-08-22 17:55:11 +08:00
    @mark2025 #51
    midway 类似 java 的写法让我很难受
    xieren58
        60
    xieren58  
       2024-08-22 18:54:33 +08:00
    bun + hono...
    jiangzm
        61
    jiangzm  
       2024-08-22 19:19:40 +08:00
    @horizon #59 啥叫类似 java 的写法? 认识这么局限吗,局限的都不能描述出来?
    horizon
        62
    horizon  
       2024-08-22 19:23:35 +08:00
    @jiangzm #59
    「 Midway (阿里开源的没有 Egg 那么重,和 nest 类似)」
    jiangzm
        63
    jiangzm  
       2024-08-22 19:23:37 +08:00
    @mark2025 #53 很久没有用 egg 了,没太关注。我看了下今年也有在发小版本,应该还是有人在维护,只是不加新功能了。
    jiangzm
        64
    jiangzm  
       2024-08-22 19:25:54 +08:00
    @horizon #62 这两框架很像啊,midway 作者都说借鉴了 nest ,说类似没什么问题。
    "类似 java 的写法"确实不知道指啥。
    mtjgu
        65
    mtjgu  
       2024-08-22 19:28:58 +08:00
    Nestjs 嵌入 Fastify 挺好用的
    wjx0912
        66
    wjx0912  
       2024-08-22 19:42:06 +08:00
    nestjs 撸过一个项目(边缘产品,核心的还是不敢用它),虽然没出过问题,但是用起来还是心慌慌
    foru17
        67
    foru17  
       2024-08-22 20:04:27 +08:00 via iPhone
    nestjs
    chenzhe
        68
    chenzhe  
       2024-08-22 20:17:46 +08:00
    经常写 crud 的管理面板,目前习惯是 nestjs 写接口,然后 ant design pro 做面板,搭楼问一下,nestjs 使用 mikro-orm 定义的实体,生成的类型文件,怎么能方便的导入到 ant design pro 里,这样就不用两边都写类型文件了。
    orange14
        69
    orange14  
       2024-08-22 20:37:10 +08:00
    hono
    jason94
        70
    jason94  
       2024-08-22 21:17:47 +08:00
    看具体业务场景

    如果是相对重的后端,首选 nestjs ,在复杂业务中使用过,没有出过问题
    zbowen66
        71
    zbowen66  
       2024-08-22 23:54:51 +08:00
    全栈直接 Next.js 一把梭,server actions 很好用,入参出参直接按普通函数写 TypeScript 定义就行了,完爆 TRPC 。
    其次 Nest.js 大而全,Koa 小而美
    hugepizza
        72
    hugepizza  
       2024-08-23 00:51:16 +08:00 via iPhone
    Hono 和 koa 一样简单明了 开箱即用的 middleware 比 koa 多 也有很多类型相关的支持 甚至直接 rpc
    没必要搭 bun 用 node 完全没问题
    如果只是很轻量的后端 可以直接上 cf worker 部署也很简单不过 node 的一些 api 用不了
    superhot
        73
    superhot  
       2024-08-23 01:01:08 +08:00
    @libook
    @meteor957
    @kuxuan
    @zbowen66
    @hugepizza

    看各位都推荐用 Koa ,我只简单写过一点点,想请教一下在实际工程中 Koa 对比 Express 的优势在哪里?特别是 Express 5 也支持异步中间件了。
    Yjhenan
        74
    Yjhenan  
       2024-08-23 09:35:03 +08:00
    除了 trpc 还有 tsrpc😆
    https://tsrpc.cn/

    CHTuring
        75
    CHTuring  
       2024-08-23 09:45:34 +08:00
    2024 年 Hono 就够用了,虽然 Nest 好,但是每次感觉都是捏着鼻子写。
    xintianyou
        76
    xintianyou  
       2024-08-23 10:19:46 +08:00
    @289396212 #22 nest 有 swagger 的插件,在每个接口上写注解就好了
    libook
        77
    libook  
       2024-08-23 10:24:28 +08:00   ❤️ 2
    @superhot #72 其实差别很小,因为作者都是同一个人,只是 koa 在早期设计实现了一个思维试验,即把原有 Express 的中间件顺序执行模式改为了“洋葱模型”,发展至今应该是两者的主要区别,看你的业务特点是使用顺序执行模型还是使用洋葱模型比较合适。

    另一方面就是 Express 自带了一些基本的中间件;而 koa 仅提供最基础的框架,需要自己选择各个中间件来组合使用。我做的项目一开始是用 Express ,后来发现随着需求越来越具体,Express 自带的中间件无法很好的满足需求,于是就自己写中间件,以至于后来几乎大部分自带中间件都没有在用了,所以后来换了 Koa 。

    其实各种框架都学一学也花不了多少时间,后端更多的是研究系统架构、数据库、中间件(消息队列、KV 、搜索引擎等)、服务治理、分布式事务等等,语言和框架就是冰山一角。
    rick2c
        78
    rick2c  
       2024-08-23 10:54:18 +08:00
    哈?不知道 nextjs 可以自定义后端框架么, 我一般是 nextjs + koa
    zbowen66
        79
    zbowen66  
       2024-08-23 10:58:15 +08:00
    @superhot #73 我写的也不多,可能过时了,做个参考:koa 给我的感觉是非常简洁,只需要记住洋葱模型,绝大多数时间都不需要查 API 。express 则没有这种舒适感
    panxiuqing
        80
    panxiuqing  
       2024-08-23 13:11:01 +08:00
    @xieren58 #60 同
    Al0rid4l
        81
    Al0rid4l  
       2024-08-23 13:47:23 +08:00
    别 koa express 了, 只写 API 没有前端页面就 hono 和 fastify
    mark2025
        82
    mark2025  
       2024-08-23 15:05:07 +08:00
    @horizon 比如?
    Jed2020
        83
    Jed2020  
       2024-08-23 17:56:28 +08:00
    我刚好也有这方面需求,前阵子技术选型我最后选了 nestjs
    JackFung
        84
    JackFung  
       2024-08-23 21:52:33 +08:00
    nestjs 吧,用起来比较规范
    momo2789
        85
    momo2789  
       2024-08-24 09:44:05 +08:00
    @Al0rid4l hono 都 1.0 了还内存泄漏着呢,怎么上生产
    oatw
        86
    oatw  
       2024-08-26 19:44:47 +08:00 via iPhone
    @mark2025 哦?我写没写过有必要告诉你?你最好抱着 node 写到死
    xyovo999
        87
    xyovo999  
       361 天前
    hyper-express 我挺喜欢的
    https://github.com/kartikk221/hyper-express
    xyovo999
        88
    xyovo999  
       344 天前
    @jiangzm 赞同,我觉得用起来太难受了,尤其是那个 next 的中间件。
    dawen
        89
    dawen  
       343 天前
    nodejs 代码写的不多,最近写了个小项目(已上线有几千用户那种),选了最经典的 express ,感觉生态比较完善
    tabc2tgacd
        90
    tabc2tgacd  
       324 天前
    我自己个人接的一些小活用的是 express ,前端纯 html/js/less 。感觉这样可能开始开发效率低点,有足够的积累后,开发效率也不差。但都是个人能完成的小玩意,没搞过大的。
    ckvv
        91
    ckvv  
       320 天前
    gentlemanChen
        92
    gentlemanChen  
       302 天前 via Android
    @reDesign 好像 api level 一些东西难复用,比如你的 rate limit 我看到复制了好几遍, 也需要每个 api try catch ,简单是简单,但是感觉缺失很多正常的支持
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1161 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 17:41 · PVG 01:41 · LAX 10:41 · JFK 13:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.