V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Features
V2EX  ›  程序员

2022 年 7 月,有哪些 node 后端高可用 web 开源框架?

  •  
  •   Features · 2022-07-05 19:31:46 +08:00 · 7519 次点击
    这是一个创建于 874 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近在学习 srping 和 php
    但是我本身是个写前端的,好多前端的 NPM 库不能在后端用
    如果后端是 node ,岂不是就能用了?

    所以想请教下各位大佬,现在有什么流行的 node web 开源框架吗?
    最好有大公司牵头,经过考验的那种
    第 1 条附言  ·  2022-07-05 21:55:53 +08:00
    我是想找一个类似 srpingboot/laravel 的
    第 2 条附言  ·  2022-07-05 22:05:42 +08:00
    请求下各位大佬,这些框架一般是直接提供服务,还是通过 nginx 进行反代?
    第 3 条附言  ·  2022-07-06 00:05:14 +08:00
    发现大佬们这些 框架 比起 springboot 和 laravel 来,差距还是很大
    比如 laravel 基于 lnmp ,有非常完善的配置,甚至一些服务器中能一键搭建 lnmp 环境
    而 node 需要自己启动一个命令行去执行
    想要做 HTTPS ,想要托管静态文件等等,肯定还得配置 nginx 之类的 web 服务器
    然后这类资料在网上就非常稀少,需要自己一点点踩坑

    然后大家说的这个 nestjs ,居然还需要自己配置底层的 http 接收器,看起来像搭积木一样很酷
    但对于我来说,反而是增加了项目的不确定性,增加了学习和开发成本

    我还是老老实实学习 JAVA 和 PHP 吧,术业有专攻
    第 4 条附言  ·  2022-07-06 13:50:39 +08:00
    主要是,现在有没有一个 facebook/airbnb/Google 这种级别的公司
    在牵头搞 node 后端的业务框架?
    比如像 Google 推 Angular ,facebook 推 React 一样?

    对于个人开发者来说,试错成本太高了
    75 条回复    2022-07-07 16:38:27 +08:00
    moen
        1
    moen  
       2022-07-05 19:35:44 +08:00   ❤️ 2
    estk
        2
    estk  
       2022-07-05 19:37:02 +08:00 via Android   ❤️ 1
    nestjs yyds
    wunonglin
        3
    wunonglin  
       2022-07-05 19:38:06 +08:00
    nestjs
    meteor957
        4
    meteor957  
       2022-07-05 19:51:04 +08:00
    nest
    qfdk
        5
    qfdk  
       2022-07-05 20:06:25 +08:00 via iPhone   ❤️ 1
    express 自己手动撸 想怎能搞就怎么搞
    pengtdyd
        6
    pengtdyd  
       2022-07-05 20:14:04 +08:00
    这个时候就必须安利一波我正在用的 Nestjs 了,底层引擎换成 Fastify 那就是速度和效率的结合,在 node web 领域无人能敌!
    可以参考我的项目(在开发中。。。):
    https://github.com/feiyu-rs/lime-backend
    hangbale
        7
    hangbale  
       2022-07-05 20:14:26 +08:00   ❤️ 1
    我也是是前端 我选择用 rust 撸 web server 🐶
    fwx5618177
        8
    fwx5618177  
       2022-07-05 20:18:20 +08:00
    主要看你打算做到什么程度,基本上 Node 什么都可以做。
    1. 常规的 Express, Koa, nest ,typescript-express-starter
    2. 微服务有 moleculer, seneca
    等等
    awesomes
        9
    awesomes  
       2022-07-05 20:33:49 +08:00
    nest 不二选择
    putaozhenhaochi
        10
    putaozhenhaochi  
       2022-07-05 20:36:40 +08:00 via Android
    nest
    国内的 midway
    Al0rid4l
        11
    Al0rid4l  
       2022-07-05 20:53:41 +08:00
    底层点的就 Fastify, 封装比较全的就 Nest
    codingBug
        12
    codingBug  
       2022-07-05 21:23:06 +08:00
    fastify ,简单易用
    wellsc
        13
    wellsc  
       2022-07-05 21:27:52 +08:00
    高可用和框架关系大吗?
    dorothyREN
        14
    dorothyREN  
       2022-07-05 21:31:38 +08:00   ❤️ 1
    高可用的框架,才疏学浅没听说过
    YouMoeYi
        15
    YouMoeYi  
       2022-07-05 21:43:49 +08:00   ❤️ 1
    Adonis 比较像 Laravel https://docs.adonisjs.com/guides/context
    Express/Koa 太小巧, 要自己找各种库组装配置 不太爽
    Nest 太笨重, 感觉不如 Spring Boot
    Egg/Midway, 阿里 KPI 项目慎重
    Features
        16
    Features  
    OP
       2022-07-05 21:53:33 +08:00
    @wellsc
    @dorothyREN
    怎么没关系啊? springboot 就说自己是高可用的
    不然什么东西才能用高可用来修饰呢?
    Features
        17
    Features  
    OP
       2022-07-05 22:07:35 +08:00
    @pengtdyd 已 star,持续关注
    Jackeriss
        18
    Jackeriss  
       2022-07-05 22:14:01 +08:00 via Android
    所以哪个框架不是高可用的?
    pengtdyd
        19
    pengtdyd  
       2022-07-05 22:16:08 +08:00
    @Features 感谢 star ,共同进步。
    dorothyREN
        20
    dorothyREN  
       2022-07-05 22:28:03 +08:00
    @Features #16 springboot 哪里说自己是高可用的了
    wellsc
        21
    wellsc  
       2022-07-05 22:39:27 +08:00
    @Features 你高兴就好
    ysc3839
        22
    ysc3839  
       2022-07-05 23:47:15 +08:00 via Android
    Node.js 的 HTTP 框架一般是直接暴露一个 HTTP 服务,不像其他语言或框架是暴露 FastCGI 等,所以不用 nginx 反代也行。但似乎大多数框架都只支持 HTTP/1.1 ,https 支持情况也不好说,一般还是建议加一层反代,这样可以支持 HTTP/2 。
    ysc3839
        23
    ysc3839  
       2022-07-05 23:48:46 +08:00 via Android
    至于后端能不能用某个库,其实得看库依赖啥,有的库只依赖 JS 语言本身的功能,就可以用。有的还依赖浏览器上才有的 Web API ,那后端就不能用。
    binhb
        24
    binhb  
       2022-07-06 00:21:27 +08:00
    springboot 会把人惯坏
    ysc3839
        25
    ysc3839  
       2022-07-06 00:26:48 +08:00 via Android
    > 而 node 需要自己启动一个命令行去执行
    只是有人帮你写好了启动脚本,不然你看看 PHP 在 Windows 上能自动启动吗?

    > 想要做 HTTPS ,想要托管静态文件等等,肯定还得配置 nginx 之类的 web 服务器
    PHP 主流的 FastCGI 模式也需要 nginx 反代
    Features
        26
    Features  
    OP
       2022-07-06 00:53:57 +08:00
    @ysc3839 只是 JAVA 和 PHP 在这方面很完善了,nodejs 确实有很多坑需要自己踩
    框架太小众了,网上资料也很少
    lzgshsj
        27
    lzgshsj  
       2022-07-06 00:54:38 +08:00
    nestjs 不用配置 http 接收器啊,默认就是用的 express ,开箱即用
    chenzhe
        28
    chenzhe  
       2022-07-06 01:34:08 +08:00
    @Features 我的习惯,docker 起一个 nginx-proxy-manager ,然后直接用它图形化的来配置 nginx ,如果不需要做什么特别的设置,直接添加一个 proxy 的域名和 docker 的端口号就可以了。以前有用过 thinkPHP ,那会儿是用的宝塔来配置,感觉操作都差不多。至于说托管静态文件,如果是用 express 写,直接一个 app.use(express.static(文件夹路径))就把静态文件全放出去啦。
    dayeye2006199
        29
    dayeye2006199  
       2022-07-06 02:11:59 +08:00 via Android
    高可用 和 高性能是不是弄混了?
    musi
        30
    musi  
       2022-07-06 07:04:31 +08:00   ❤️ 1
    总结一句话,你作为前端就是对 Node.js 有误解
    musi
        31
    musi  
       2022-07-06 07:07:24 +08:00   ❤️ 1
    “而 node 需要自己启动一个命令行去执行”
    我就问问 linux 上哪个软件不需要用命令行执行,最多就是别人给你写好了脚本,然后开机自启,你 node npm 上找找不也能找得到,再说现在不都容器化了?
    felixcode
        32
    felixcode  
       2022-07-06 09:01:10 +08:00   ❤️ 2
    有时高可用是看运维能力的,而不是简单的只看框架,最终取决于最短板。
    如果 nginx 资料都属于“这类资料在网上就非常稀少”,那最短板就不是框架了。
    heng1025
        33
    heng1025  
       2022-07-06 09:29:20 +08:00
    我也是前端,还是选择 spring boot ,无脑开发,守住头发要紧~
    RRRoger
        34
    RRRoger  
       2022-07-06 09:49:26 +08:00
    express 老牌框架 稳定好用
    lujiaosama
        35
    lujiaosama  
       2022-07-06 10:07:30 +08:00
    选择 spring boot 完全没问题, 不过配置 nginx 反向代理属于基础操作, 而且 nginx 的用途也不仅限于此, 绕不过去的. 这个资料哪里稀少不都烂大街了么. 好几点槽点感觉你是还没有正儿八经的写 web 服务正式上线过.
    wu67
        36
    wu67  
       2022-07-06 10:10:40 +08:00   ❤️ 1
    koa 过于小, 要各种找额外工具.
    nest 实际上就是加了各种约束的 node 写法, 纯前端转过去各种绕不过来
    express 上手就来, 写写小项目还是可以的, 临时用来写个接口画前端页面的第一选择
    libook
        37
    libook  
       2022-07-06 10:41:28 +08:00   ❤️ 1
    换技术栈,就要抛掉以前其他技术栈的思维定式,否则你会一直觉得用起来很别扭,不如回去用以前的技术栈。

    比如以前见过有人来网上问 Java 有没有类似.Net 的框架,后来根据网友的介绍尝试完之后表示“Java 真难用”,实际上 Java 自己有好用的思想、框架以及使用方式,别扭完全是自找的。

    现在 Node 开发领域普遍使用微服务架构和云原生部署,搭配 DevOps 、服务治理、SRE 来提高开发效率、运行效率、可用性,框架做的事情反而很少,大多情况下用个 koa 或 express 就能满足需求,个别情况下直接用原生 http 模块手写也很快。

    HTTP 协议方面,Nginx 已经是业界事实标准了,而且通常也就是几行配置的事情。你用 Node 是可以做 HTTPS 、托管静态文件的,前者原生模块就能支持,后者框架都有中间件可以一行调用;虽然绝大多语言的原生 API 都可以实现,但性能基本被 Nginx 吊打,除非你愿意花大量没必要的精力去优化。

    不管是学 Node 还是学其他什么技术,最好先看官方网站上的教程、API 文档,先了解这项技术能提供什么基础能力;然后去按照自己的原始需求找这个技术栈的最佳实践,看一看有没有比其他技术更满足当前需求的方案。
    dabaoziwy
        38
    dabaoziwy  
       2022-07-06 10:45:14 +08:00
    nestjs
    cxmokai
        39
    cxmokai  
       2022-07-06 10:46:55 +08:00
    研究了一圈还得是 nest
    Features
        40
    Features  
    OP
       2022-07-06 12:33:10 +08:00
    @felixcode 我是说 nginx 和 node 搭配使用的这部分资料
    nginx 和 php ,tomcat 搭配的到处都是,甚至官网都有样例
    felixcode
        41
    felixcode  
       2022-07-06 12:39:05 +08:00
    walpurgis
        42
    walpurgis  
       2022-07-06 13:09:45 +08:00
    springboot 默认不也是内嵌 web 服务器吗,你怎么给 springboot 配 nginx 的就怎么给 node 配,nginx 压根就不关心后面是 java 还是 node
    Trim21
        43
    Trim21  
       2022-07-06 13:29:35 +08:00 via Android
    Nginx 跟 node 有啥需要配合的啊,两边都是直接用的 HTTP 协议,不就是 proxy pass 或者 upstream 反代一下吗。反而 PHP 真正要写的那一堆 cgi 配置麻烦多了。
    vone
        44
    vone  
       2022-07-06 14:07:18 +08:00
    “而 node 需要自己启动一个命令行去执行”
    https://www.npmjs.com/package/pm2
    wunonglin
        45
    wunonglin  
       2022-07-06 14:16:07 +08:00
    看了第三条附言。

    感叹还是过几年再回头看看自己这个问题吧。你会发现你的想法偏得特别离谱。


    ---------------------
    比如 laravel 基于 lnmp ,有非常完善的配置,甚至一些服务器中能一键搭建 lnmp 环境,而 node 需要自己启动一个命令行去执行
    ---------------------
    php 我不是很熟,但是我记得一般的 php 使用方法都是要 nginx 或者 apache 去转发给 fpm 执行,然后在返回内容,
    那么流程就是:nginx -> fpm ,而 node 可以执行一个 js 脚本就能永驻(我记得 php 也可以:php index.php ,但是为什么我见过的框架都不这么用,我没深究)。基于以上才需要 lnmp ,本来这个就不应该存在的。现在容器化时代,这些更是另一个纬度的事了。

    ---------------------
    想要做 HTTPS ,想要托管静态文件等等,肯定还得配置 nginx 之类的 web 服务器
    ---------------------
    node 可以直接使用 ssl 文件,要个毛线 nginx ?

    这年代都是用对象存储存静态文件或者 nginx 去使用静态文件了,你个 node 管好自己的 api 服务就好了,不用操其他的心。

    ---------------------
    我还是老老实实学习 JAVA 和 PHP 吧,术业有专攻
    ---------------------
    在以后这个容器化时代,java 有 srping 还不错,php 就等着蛋疼吧。
    terranboy
        46
    terranboy  
       2022-07-06 14:20:05 +08:00
    nest.js 不是和 spring 挺像的 貌似 LZ 关注的 重点不在这上面 而在服务器环境上? 有点莫名其妙
    awesomes
        47
    awesomes  
       2022-07-06 14:27:00 +08:00
    @wunonglin 楼主好好看看这层的回答吧,还 php ?
    FakerLeung
        48
    FakerLeung  
       2022-07-06 14:40:47 +08:00
    不如直接上 Saas
    YouMoeYi
        49
    YouMoeYi  
       2022-07-06 14:56:54 +08:00
    我觉得 OP 现在这个阶段不要过于纠结框架和技术栈的问题
    一种后端技术学懂后其他的也能很快上手 就像你会 React 上手 Vue 也很轻松一样
    而且只有后端真正学懂了才真正具有挑框架的能力 你现在挑来挑去就有点像只懂一点前端的人问 react 和 vue 哪个好 然后浅浅看了下文档给 React/Vue 挑"毛病"罢了
    welove
        50
    welove  
       2022-07-06 15:01:22 +08:00
    可以试试 midway ,我用起来感觉还是挺不错的
    Features
        51
    Features  
    OP
       2022-07-06 15:17:14 +08:00
    @wunonglin 大佬说的挺好,很受用,能看一下最后一条吗?
    Features
        52
    Features  
    OP
       2022-07-06 15:17:33 +08:00
    @wunonglin 能看一下最后一条附言吗?
    Features
        53
    Features  
    OP
       2022-07-06 15:19:59 +08:00
    @terranboy 因为框架本身一般是没啥问题的,很多莫名其妙的问题都是出在环境上面
    框架更多时候只是加快 CURD 的速度吧?
    Features
        54
    Features  
    OP
       2022-07-06 15:21:51 +08:00
    @welove 这个确实可以
    Features
        55
    Features  
    OP
       2022-07-06 15:30:18 +08:00
    @welove 想请教一下,midway 对数据库有做封装吗?
    我个人非常关心这一块,但是看文档里居然一点都没提到
    Features
        56
    Features  
    OP
       2022-07-06 15:33:17 +08:00
    @welove 看到了。。。眼神不太好
    liaotuo
        57
    liaotuo  
       2022-07-06 17:18:08 +08:00
    nestjs yyds
    welove
        58
    welove  
       2022-07-06 17:21:47 +08:00
    midway 的话建议用 sequelize,插件的话就用 sequelize- typescript ,基础的用法 midway 官网里面讲过了,高级一点的用法要你去查 npm 上面的文档的,还得结合 sequelize 官方文档来看,当然你也可以用 midway 推荐的 typeorm ,不过那个我没用过,不知道坑多不多
    SingeeKing
        59
    SingeeKing  
       2022-07-06 17:23:27 +08:00
    OP 这思维,应该上 lambda ,啥都不用考虑

    举个简单的例子,nextjs 的 _api 下直接写路由处理函数
    realpg
        60
    realpg  
       2022-07-06 18:41:55 +08:00
    @Trim21 #43
    他是宝塔面板党,PHP 点点就配好了……
    XCFOX
        61
    XCFOX  
       2022-07-06 20:07:31 +08:00
    推荐 TypeGraphQL
    写法上和 nestjs 类似,但是没有 DI ,一下子省了很多代码。
    https://typegraphql.com/
    Features
        62
    Features  
    OP
       2022-07-06 20:33:35 +08:00
    @realpg 宝塔点点配置 php 提供的服务,可用性还是很高的
    一般的框架用 pm2 起一个服务,可用性能达到宝塔 PHP 这种水平吗?
    neutrino
        63
    neutrino  
       2022-07-06 23:59:47 +08:00
    @Features 不太容易兼顾宝塔的可操作性和可靠性,建议还是学习 PHP 好一些。
    walpurgis
        64
    walpurgis  
       2022-07-07 00:10:30 +08:00
    原来 OP 说的可用性,是指对于新手的可操作性,而不是 SLA 的那个可用性?
    Features
        65
    Features  
    OP
       2022-07-07 00:27:30 +08:00
    @walpurgis 我说的就是 服务的高可用性,我是评估这个框架,跑起来以后,是否高可用?
    在兼顾开发效率的同时,在性能和稳定性上是否足够?
    不需要投入过多的运维精力,能得到更高可用的服务,难道不是很好的吗?
    hLc1
        66
    hLc1  
       2022-07-07 00:33:58 +08:00 via Android
    nestjs 作者不是谷歌的吗?
    walpurgis
        67
    walpurgis  
       2022-07-07 01:35:29 +08:00
    不是我看不起宝塔,不过你拿宝塔作为高可用的例子,是不是搞错了什么
    上面大佬都说了,除非有 bug 或漏洞,不然框架跟高可用没什么关系,单机环境也不用讨论高可用,机器出故障的概率都比程序崩溃概率高了
    性能方面,laravel 妥妥垫底,不过 OP 肯定碰不到语言层面上的性能问题,可以忽略
    部署运维方面,使用傻瓜面板当然觉得 php 简单,而对于习惯用容器部署的人来说,nginx+fpm 体验极差
    Features
        68
    Features  
    OP
       2022-07-07 01:40:24 +08:00
    @walpurgis 是前面有人拿宝塔举例,我跟着这么一说的
    宝塔是第三方工具,不属于框架范畴,不在我说的框架范围内
    我说的是 lnmp 环境,这么多年确实很稳定,很好用啊
    frankies
        69
    frankies  
       2022-07-07 02:18:13 +08:00 via Android
    别问,先找个顺眼的框架学起来,你纠结的时间都能学一遍了
    lanlanye
        70
    lanlanye  
       2022-07-07 02:52:52 +08:00
    怎么这么乱……嫌慢用 rails 啊,可以把 node 嵌进去,你说的 airbnb 也在用
    Macolor21
        71
    Macolor21  
       2022-07-07 08:14:29 +08:00 via iPhone
    高可用是分布式系统的概念,框架能做但比较少,eureka 说自己是高可用的,意味着你在集群部署的时候注册中心不是强一致性的。

    上面一大半都是与高可用话题无关的,这标题取得,讲道理我进来看看多离谱,结果比我想的还离谱
    siweipancc
        72
    siweipancc  
       2022-07-07 09:00:01 +08:00 via iPhone
    ……你在想屁吃,这算啥高可用,这叫开箱即用,就算是 Angular 也是勉强一用,还得自己改造
    fqy12300
        73
    fqy12300  
       2022-07-07 09:31:04 +08:00   ❤️ 1
    Nest.js 、Next.js 、Nuxt.js 傻傻分不清楚。
    ychost
        74
    ychost  
       2022-07-07 10:41:12 +08:00
    koa2 好用,node 千万别去用 Java 那套,真心不适合,Node 写的越简单越好,不需要依赖注入 /ORM/注解,其实 java 的 WebFlux 和 Vert.x 写起来倒是有 Node 的感觉
    CoderLife
        75
    CoderLife  
       2022-07-07 16:38:27 +08:00
    怎么没有 eggjs
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3268 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 12:53 · PVG 20:53 · LAX 04:53 · JFK 07:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.