importmeta
V2EX  ›  Node.js

吐槽一下 Nest.js 太复杂了

  •  1
     
  •   importmeta · Feb 3, 2025 · 13900 views
    This topic created in 638 days ago, the information mentioned may be changed or developed.

    正在写个项目, 模块一多心智负担较大.

    略微吐槽一下,简直是现实版茴字有几种写法.

    1.把中间件拆成 Middleware,Guards,Interceptors,Exception,Pipes, 并且他们都能获取请求上下文(Request, Response), 并且有不同的顺序, 但同类别内也有顺序, 并且生命周期是如此的繁琐.

    https://docs.nestjs.com/faq/request-lifecycle

    2.封装一个三方 API 花样太多了.

    单独的 Service, Providers, Dynamic Module, ConfigurableModuleClass

    这里面还有分 Sync 和 Async 导入, Global 模块.

    3.模块系统是 Angular 那一套, 注册繁琐, 还会出现循环依赖.

    心智负担比 Spring Boot 高太多了.

    JS 的后端框架不像前端那样卷, 真希望能出个好用的.

    59 replies  •  2025-05-18 19:35:13 +08:00
    Solix
    Solix
    Feb 3, 2025
    1
    建议直接让 cursor 给你写哈哈
    SoyaDokio
    SoyaDokio
    Feb 3, 2025
    2
    刚接触前段框架这一套,给我的感觉就是前端框架的写法太多太灵活,上手虽然没那么难,但搞懂真挺麻烦的。
    workg
    workg
    Feb 3, 2025
    3
    我感觉这种架构面向的是大型项目。平常 crud express 足够了
    hefish
    hefish
    Feb 3, 2025
    4
    op ,你还上不上 next.js , 客户等着交付呢。。。赶紧的。
    JiRouWaZi
    JiRouWaZi
    Feb 3, 2025
    5
    expressjs 公司内部定制一下 , 够了,在上个请求并发分流 全局 session , 其他看什么加什么得了 短小有力
    JiRouWaZi
    JiRouWaZi
    Feb 3, 2025
    6
    @JiRouWaZi 而前端, 我记得 react 远古时期手动绑定 this 、还有其他奇奇怪怪的很多写法;但 我觉得状态管理器和有些东西还是挺有价值的
    hronro
    hronro
    Feb 3, 2025
    7
    @SoyaDokio #2
    这明明是后端框架, 怎么到你这就成了前端框架了? 和语言绑定了, 是 JS 就全都得叫前端框架?
    andrew2558
    andrew2558
    Feb 3, 2025
    8
    同感,感觉 next.js 太复杂,但又没有好的支持服务器渲染和静态生成的库。
    me1onsoda
    me1onsoda
    Feb 3, 2025 via Android
    9
    是啊,我就无法理解,JS 这么牛逼的语言,一个后端框架怎么就不能根据装饰器自动注册,非要手动 import
    jsq2627
    jsq2627
    PRO
    Feb 3, 2025
    10
    @me1onsoda 之前读 Rails 项目代码经常迷路,所以我不觉得自动注册是好的实践。显式 import 可读性提高很多
    jsq2627
    jsq2627
    PRO
    Feb 3, 2025❤️1
    11
    Nest.js 是用在大型后端项目上的,比如几十个人在同一个仓库上迭代,屎山要堆也堆在各自的 module / provider / controller 里面。
    或者是做乙方,同样的产品针对不同的甲方要搞不同的定制化,这时候 nestjs 的 DI 就非常好用。
    usVexMownCzar
    usVexMownCzar
    Feb 3, 2025 via iPhone
    12
    @andrew2558
    nest 非 next 😆
    meteor957
    meteor957
    Feb 3, 2025
    13
    koa 完全够了
    wu67
    wu67
    Feb 3, 2025❤️4
    14
    要么 express, 要么 koa, 有心思搞 nest 那套我干嘛不上 Java 呢....
    IvanLi127
    IvanLi127
    Feb 3, 2025
    15
    我觉得挺好用的,不是小微项目,用这套挺舒服的。如果小项目并且只对数据库包一层逻辑,那就是过度抽象,得换其他的了。

    要怪得怪做选型的失误或乱搞,Nest.js 没啥问题。

    轻量的上 hono.js 或 fastify.js 吧,如果只有 web 端,上 trpc 做全栈更香。
    DINGONE
    DINGONE
    Feb 3, 2025 via iPhone❤️1
    16
    spring boot 人称小 Nest.js
    easychen
    easychen
    Feb 3, 2025
    17
    可以试试 AdonisJS
    andrew2558
    andrew2558
    Feb 3, 2025
    18
    @chiaf 尴尬了
    zhw2590582
    zhw2590582
    Feb 3, 2025❤️1
    19
    express 含金量并未下降
    Rust2015
    Rust2015
    Feb 3, 2025
    20
    nest.js 难,那 spring boot 整合 vue ,那不是难的没边
    foru17
    foru17
    Feb 3, 2025
    21
    我是前端出身,最近的两个大型项目后端都是用 NestJS 写了,符合工程化的选型,基础业务框架写好了,后面再写各种模块方便。就是互相依赖这个处理起来有点不爽。
    linshenqi
    linshenqi
    Feb 3, 2025
    22
    我看成了 next.js
    UB
    UB
    Feb 3, 2025
    23
    @easychen 这个框架真的不错,我试了 egg,express,koa 等等,最终选择了这个
    slowgen
    slowgen
    PRO
    Feb 3, 2025
    25
    Nestjs 封装是有点过度了,既然是 TypeScript 这种语言加上 Node 的 runtime ,很多东西是可以做减法的。
    我用的时候就做了很多减法,比如:
    service 全部用 static 函数,就不需要注入了,要 mock 直接 class.method = function(){},要是非 static 的就 class.prototype.method 重新赋值来覆盖;
    Providers 直接不用,官方案例简直是神经病连 HttpClient 都封装一层,它以为自己在用.NET 上吗,还不如开个文件在里面定义个常量然后导出,不也是全局唯一的吗;
    Guards 也放弃,哪来那么多策略,直接在 Middleware 里简单鉴权就行了,复杂的我宁愿单独写一个 api 网关;
    Modules 只拿来做业务模块区分,里面只引入控制器;

    现在,我直接换 hono 了,搞个 module 文件夹自己分层就好了
    SingeeKing
    SingeeKing
    Feb 3, 2025
    26
    nest 确实有点过度封装

    但是按照 IoC 思想的,似乎也只有它?
    Akagi201
    Akagi201
    Feb 3, 2025❤️1
    27
    不喜欢 spring boot 的人同样不会喜欢 nest.
    我自己 node.js 项目不会太复杂, 复杂项目会直接用 rust 来写, 为啥要用 node.js 写复杂后端项目啊.
    逻辑是一样的, 我从来没用过 DI 这种东西. 现在的趋势(以及我个人一直的偏好)是简单化, 就像做 agent 开发, 不用 langchain, 直接用最简单的抽象, 基于 api 进行调用.
    另外, 后端新手上来就用 nest 绝对不好, 绝对会让他觉得后端很难的印象. 其实很多抽象, 概念都没必要. 直接根据业务写代码即可. 我之前用 hono + bun 写了一个服务, 可以参考 https://github.com/Akagi201/hono-template
    sagaxu
    sagaxu
    Feb 3, 2025
    28
    你就说新不新吧

    next nest 之后,下一个 hono?
    coffeeking
    coffeeking
    Feb 3, 2025
    29
    试试 midway 吧,和 Nest.js 定位一样,国产的,还是喜欢国人的审美,简单优雅,就像 vue 之与 react 一样。
    subframe75361
    subframe75361
    Feb 3, 2025
    30
    Bun + Elysia ,写着挺爽的
    DICK23
    DICK23
    PRO
    Feb 3, 2025
    31
    bun+hono+zod+drizzle,一套从 model 定义到前端 api 调用都能完全类型提示。活的太累了,就需要 hono 这类工具来解放自己。
    amlee
    amlee
    Feb 3, 2025
    32
    写小项目就用 epxress.js 或者新的 hono.js 一把梭。

    写大项目后端别用 js 了
    dayeye2006199
    dayeye2006199
    Feb 4, 2025 via Android
    33
    这么写为啥用 js 呢…回去 java 不好吗
    zhangk23
    zhangk23
    Feb 4, 2025
    34
    我有幸参加过三个月左右的 nestjs+angular 的项目,然后润了

    评价为若至技术栈,又臭又长,纯骗经费用的
    C64NRD
    C64NRD
    Feb 4, 2025❤️1
    35
    我也用不习惯 nestjs ,最后选了小巧的 fastify
    kenberkeley
    kenberkeley
    Feb 4, 2025 via iPhone❤️2
    36
    所以我用了轻量版的 routing-controllers ,一样的 declarator-based 语法,但没有了那些用不上的概念。
    doujiangjiyaozha
    doujiangjiyaozha
    Feb 4, 2025
    37
    之前就听说 nestjs 的大名,折腾了下想丢到生产环境用用,配 docker,配数据库,配日志等等,用空余时间花了一个多星期,
    对于前端来讲真的学习成本太高了,还有一堆规则,有这时间多摸下鱼不香吗😏
    后面自己的项目果断 express,配合 serverless,直接写业务逻辑
    fsdrw08
    fsdrw08
    Feb 4, 2025 via Android
    38
    后端入门时第一个接触的就是 nestjs ,以至于日后用 Asp.net core 都觉得框架太简陋,没 nestjs 做得那么细
    doommm
    doommm
    Feb 4, 2025❤️1
    39
    @kenberkeley declarator-based ? decorator-based ?
    nl101531
    nl101531
    Feb 4, 2025 via iPhone
    40
    讨厌 Java ,理解 Java ,成为 Spring
    kenberkeley
    kenberkeley
    Feb 4, 2025 via iPhone
    41
    @doujiangjiyaozha 都上 Serverless 了还用 Express 😂
    yolio2003
    yolio2003
    Feb 4, 2025
    42
    非常同意 next.js 太复杂的看法 水平有点菜 但是这是前端最火框架了。。。
    epiloguess
    epiloguess
    Feb 4, 2025❤️1
    43
    不想恶意攻击,但是评论区很多把 nestjs 看成 nextjs 的真的难绷,名字看错了就算了,内容也不看?
    mark2025
    mark2025
    Feb 4, 2025
    44
    @me1onsoda 所有导入都显示声明好处是方便管理。如果想简单点(又不至于 express 那种简陋)、支持自动扫描可以试试国产的 midway.js
    https://midwayjs.org/ or https://beta.midwayjs.org/
    SuYia
    SuYia
    Feb 5, 2025
    45
    可以看看 Artus ,基于 IoC + Container 实现

    https://www.artusjs.org/
    weixiangzhe
    weixiangzhe
    Feb 5, 2025
    46
    fastify 感觉够使了
    funnyecho
    funnyecho
    Feb 5, 2025
    47
    确实复杂度高,虽然每一层都是有意义的封装~

    感觉,上手的时候只管 svc 层,后面发现需要 inject 啥的,逐步接触,慢慢堆会好一点。

    项目开始一下子要完成层次划分、或者说让团队每个人都明白这种分层,就难搞一点了。
    TimPeake
    TimPeake
    Feb 5, 2025
    48
    小项目 国产框架就够了.....之前用 egg.js 感觉挺好使的。
    jiangzm
    jiangzm
    Feb 5, 2025
    49
    midwayjs
    victimsss
    victimsss
    Feb 5, 2025
    50
    nestjs 还能接受 ,但是混用应用有点恶心
    DingJZ
    DingJZ
    Feb 5, 2025
    51
    今年终于跳出 node ,用 ror 写了一个项目,太舒服了
    gengjiawen
    gengjiawen
    Feb 5, 2025
    52
    试试 blitzjs ,我用了一年多,个人很满意,比较接近 ruby on rails
    hwlv
    hwlv
    Feb 6, 2025
    53
    @doujiangjiyaozha express 怎么配合 serverless 用呢,可以分享下吗
    shellus
    shellus
    Feb 6, 2025
    54
    Nest.js 确实是个很复杂的框架,简直是故意让人头疼。要我说,这么多中间件、服务、模块系统,真是折腾。为了封装个 API 竟然还要搞那么多花样,搞得像在玩魔方。还要弄不同的导入方式,真是让人抓狂。用这个框架不仅心智负担大,还得时刻提防循环依赖,简直是恶梦。

    那些说它适合大型项目的,搞笑吧,Express 或者 Koa 都能轻松搞定,还需要用这种繁琐的框架吗?想要搞出个好用的后端框架,别学 Angular 那一套,把事情复杂化,只会让人更反感。

    有这心思不如直接用 Java ,Spring Boot 起码还不至于这么折磨人。后端框架本来就不应该那么卷,搞得好像我们开发者是受虐狂一样。找个简单高效的用就行了,Nest.js 这种复杂的玩意儿,还是留给那些喜欢折腾的人吧。
    dreamerblue
    dreamerblue
    Feb 6, 2025
    55
    它受 ng 思想影( du )响( hai )很深,基于 Ng Style Module 的底层设计限制了很多东西,也让不少能力只能以 Module 补丁的形式打上去,变得异常复杂。我在公司的业务和个人项目还在用几年前写的框架 bwcxjs ,算是带了 DI 的声明式 Koa ,轻量小巧,多数时候够用。
    dudubaba
    dudubaba
    Feb 6, 2025
    56
    是繁琐了些,但是个人觉得是最规范的针对前端 er 的后端框架,没有之一。
    Belmode
    Belmode
    Feb 8, 2025
    57
    nestjs 提供的开箱即用的东西太丰富了,到目前为止我还没有发现有哪个 JS 相关平台的 web 框架,能有 nestjs 做的这么细的。
    绝大部分开发场景需要的依赖都有适配到,也兼容自身的 ts 类型系统做了 adapter ,我觉得还是挺友好的。
    skkakaka2
    skkakaka2
    Feb 11, 2025❤️1
    58
    虽然但是,有些人连 nextjs nestjs 都搞不清楚分别是做什么的就开始吐槽了,其水平可见一斑
    yuu2lee4
    yuu2lee4
    May 18, 2025
    59
    @me1onsoda 看看 midwayjs 呢
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5390 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 276ms · UTC 03:23 · PVG 11:23 · LAX 19:23 · JFK 22:23
    ♥ Do have faith in what you're doing.