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

吐槽一下 Nest.js 太复杂了

  •  1
     
  •   importmeta · 1 天前 · 3838 次点击

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

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

    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 的后端框架不像前端那样卷, 真希望能出个好用的.

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

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

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

    现在,我直接换 hono 了,搞个 module 文件夹自己分层就好了
    SingeeKing
        26
    SingeeKing  
       22 小时 9 分钟前
    nest 确实有点过度封装

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

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

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

    评价为若至技术栈,又臭又长,纯骗经费用的
    xiaoshan5733
        35
    xiaoshan5733  
       14 小时 51 分钟前   ❤️ 1
    我也用不习惯 nestjs ,最后选了小巧的 fastify
    kenberkeley
        36
    kenberkeley  
       10 小时 41 分钟前 via iPhone   ❤️ 1
    所以我用了轻量版的 routing-controllers ,一样的 declarator-based 语法,但没有了那些用不上的概念。
    doujiangjiyaozha
        37
    doujiangjiyaozha  
       6 小时 16 分钟前
    之前就听说 nestjs 的大名,折腾了下想丢到生产环境用用,配 docker,配数据库,配日志等等,用空余时间花了一个多星期,
    对于前端来讲真的学习成本太高了,还有一堆规则,有这时间多摸下鱼不香吗😏
    后面自己的项目果断 express,配合 serverless,直接写业务逻辑
    fsdrw08
        38
    fsdrw08  
       5 小时 34 分钟前 via Android
    后端入门时第一个接触的就是 nestjs ,以至于日后用 Asp.net core 都觉得框架太简陋,没 nestjs 做得那么细
    doommm
        39
    doommm  
       4 小时 59 分钟前   ❤️ 1
    @kenberkeley declarator-based ? decorator-based ?
    nl101531
        40
    nl101531  
       3 小时 24 分钟前 via iPhone
    讨厌 Java ,理解 Java ,成为 Spring
    kenberkeley
        41
    kenberkeley  
       3 小时 21 分钟前 via iPhone
    @doujiangjiyaozha 都上 Serverless 了还用 Express 😂
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2338 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 08:50 · PVG 16:50 · LAX 00:50 · JFK 03:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.