吐槽一下 Nest.js 太复杂了

10 天前
 importmeta

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

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

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

6517 次点击
所在节点    Node.js
58 条回复
foru17
10 天前
我是前端出身,最近的两个大型项目后端都是用 NestJS 写了,符合工程化的选型,基础业务框架写好了,后面再写各种模块方便。就是互相依赖这个处理起来有点不爽。
linshenqi
10 天前
我看成了 next.js
3085570450tt
10 天前
@easychen 这个框架真的不错,我试了 egg,express,koa 等等,最终选择了这个
Cbdy
10 天前
shuimugan
10 天前
Nestjs 封装是有点过度了,既然是 TypeScript 这种语言加上 Node 的 runtime ,很多东西是可以做减法的。
我用的时候就做了很多减法,比如:
service 全部用 static 函数,就不需要注入了,要 mock 直接 class.method = function(){},要是非 static 的就 class.prototype.method 重新赋值来覆盖;
Providers 直接不用,官方案例简直是神经病连 HttpClient 都封装一层,它以为自己在用.NET 上吗,还不如开个文件在里面定义个常量然后导出,不也是全局唯一的吗;
Guards 也放弃,哪来那么多策略,直接在 Middleware 里简单鉴权就行了,复杂的我宁愿单独写一个 api 网关;
Modules 只拿来做业务模块区分,里面只引入控制器;

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

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

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

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

评价为若至技术栈,又臭又长,纯骗经费用的
xiaoshan5733
9 天前
我也用不习惯 nestjs ,最后选了小巧的 fastify
kenberkeley
9 天前
所以我用了轻量版的 routing-controllers ,一样的 declarator-based 语法,但没有了那些用不上的概念。
doujiangjiyaozha
9 天前
之前就听说 nestjs 的大名,折腾了下想丢到生产环境用用,配 docker,配数据库,配日志等等,用空余时间花了一个多星期,
对于前端来讲真的学习成本太高了,还有一堆规则,有这时间多摸下鱼不香吗😏
后面自己的项目果断 express,配合 serverless,直接写业务逻辑
fsdrw08
9 天前
后端入门时第一个接触的就是 nestjs ,以至于日后用 Asp.net core 都觉得框架太简陋,没 nestjs 做得那么细
doommm
9 天前
@kenberkeley declarator-based ? decorator-based ?
nl101531
9 天前
讨厌 Java ,理解 Java ,成为 Spring

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/1108703

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX