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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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