现在 node 做后端一般用什么框架 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
SaintSeiya
V2EX    Node.js

现在 node 做后端一般用什么框架

  •  
  •   SaintSeiya 2020-01-13 10:03:49 +08:00 20015 次点击
    这是一个创建于 2150 天前的主题,其中的信息可能已经有所发展或是发生改变。
    想做个小东西,也就写一些接口,不知道现在还流不流行 express 和 koa 了
    第 1 条附言    2020-01-13 11:44:25 +08:00
    多谢大家,看了下 egg 和 nestjs 准备挑一个用用
    64 条回复    2020-01-20 23:54:24 +08:00
    ran1ever
        1
    ran1ever  
       2020-01-13 10:05:16 +08:00
    Mark 一哈 我也准备搞搞这个
    TomatoYuyuko
        2
    TomatoYuyuko  
       2020-01-13 10:05:58 +08:00
    之前面过的几家打听都是 koa,不知道是不是偏差
    ares586
        3
    ares586  
       2020-01-13 10:09:40 +08:00
    我个人站用的是 koa2,现在培训班也讲 egg.js
    baleeny
        4
    baleeny  
       2020-01-13 10:10:11 +08:00
    流行吧,我们公司还是 express
    lotosbin
        5
    lotosbin  
       2020-01-13 10:15:51 +08:00
    banchen
        6
    banchen  
       2020-01-13 10:19:47 +08:00
    egg,midway
    johnnyNg
        7
    johnnyNg  
       2020-01-13 10:20:28 +08:00
    nestjs
    crs0910
        8
    crs0910  
       2020-01-13 10:23:07 +08:00   1
    leeggco
        9
    leeggco  
       2020-01-13 10:23:42 +08:00
    express
    enjoyCoding
        10
    enjoyCoding  
       2020-01-13 10:33:08 +08:00
    express koa egg
    Cbdy
        11
    Cbdy  
       2020-01-13 10:33:32 +08:00 via Android
    express
    fivelonglong
        12
    fivelonglong  
       2020-01-13 10:34:57 +08:00
    egg.js
    NasirQ
        13
    NasirQ  
       2020-01-13 10:34:59 +08:00
    egg 吧...大厂维护比较好些
    birjemin
        14
    birjemin  
       2020-01-13 10:37:10 +08:00
    egg.js 吧,大厂后面好乘凉,如果选用国外的也行,遇到问题,看你英文水平了。
    Colorful
        15
    Colorful  
       2020-01-13 10:39:52 +08:00
    我最近在用 loopback,觉得还不错。
    coconut5
        16
    coconut5  
       2020-01-13 10:41:50 +08:00
    koa2
    PixelMage
        17
    PixelMage  
       2020-01-13 10:47:21 +08:00
    必须 nest,你对比一下 egg nest 等框架的星数就知道了。
    lookas2001
        18
    lookas2001  
       2020-01-13 10:55:16 +08:00 via Android
    egg (koa)
    ethusdt
        19
    ethusdt  
       2020-01-13 10:57:47 +08:00
    restify
    mytharcher
        20
    mytharcher  
       2020-01-13 11:03:12 +08:00   3
    一直在用 express,其实比较想迁移到 koa 的,毕竟多了原生异步中间件和更自由执行中间件顺序的特性,但想想其实大多数情况这个特性也没那么必要,除此以外 (req, res, next) 和 ({ req, res }) 真没多大区别。据说 express v5 以后也会原生支持异步中间件,只是 tj 大神离开 Node.js 社区后一直是 alpha 版不知道什么时候升。另外就是我一直懒得写一个 koa 下和 https://github.com/mytharcher/rainbow 一样好用的路由自动配置中间件,所以就一直没迁。

    也看过 eggjs 和 nestjs,不想用的原因还是一样,实在不想这么麻烦的定义 controller 和路由,我个人认为天生这俩东西就应该绑定到一起,没必要写 controller 的时候还要再去定义一次路径,否则每次要找定义了什么路径还要去文件里面找。

    其实还是因为 express 本身足够灵活,ORM 层 seqelize 也比较成熟了,所以针对很多简单的 RESTful 应用,最重要的就是设计好数据库,其他常用的东西简单封装一下就能用了,完全没有那么麻烦。尤其是如果对 RESTful 理解比较深的话,总是能总结出一些统一的设计范式,自然的就形成约定了。比如我们团队写了好几个 Node.js 后端项目之后,逐渐的就总结出一些常规且固定的用法,形成了一套针对 express 的基础扩展包 https://github.com/mytharcher/express-utils。这里其实已经无关 express 还是 koa 了,主要看你们团队对于数据库设计和接口设计的理解,形成统一的规范就用什么都行。最后估计到某一天我也会按我们现有的方式把我们的扩展包进化成完整约定的另一套框架吧,哈哈。
    janxin
        21
    janxin  
       2020-01-13 11:03:59 +08:00
    nestjs 推荐一下
    mytharcher
        22
    mytharcher  
       2020-01-13 11:05:35 +08:00
    @mytharcher
    扩展包链接(上面忘加空格识别有问题): https://github.com/mytharcher/express-utils
    xlh001
        23
    xlh001  
       2020-01-13 11:07:08 +08:00
    egg
    IamUNICODE
        24
    IamUNICODE  
       2020-01-13 11:09:36 +08:00
    express,koa 只用过 1,egg 也不错
    CaanDoll
        25
    CaanDoll  
       2020-01-13 11:19:59 +08:00
    js egg
    CaanDoll
        26
    CaanDoll  
       2020-01-13 11:20:17 +08:00
    ts nest
    Liutos
        27
    Liutos  
       2020-01-13 11:20:49 +08:00
    egg-js
    iugo
        28
    iugo  
       2020-01-13 11:21:21 +08:00
    我们以前用 koa2, 现在使用函数云如 AWS Lambda, 就不用框架了.

    框架只是给个规范, 如果团队已经形成一套规范, 框架什么的就很随意了.

    当然, 库是肯定要用的.
    tonyleen
        29
    tonyleen  
       2020-01-13 11:22:05 +08:00
    restify
    kayv
        30
    kayv  
       2020-01-13 11:28:49 +08:00   1
    必须 ts nest,一本正经的后端
    noobma
        31
    noobma  
       2020-01-13 11:33:12 +08:00
    nestjs
    acthtml
        32
    acthtml  
       2020-01-13 11:39:02 +08:00
    express, koa 只能算是类库,eggjs 算是框架。
    heasy
        33
    heasy  
       2020-01-13 11:49:09 +08:00
    国内的话推荐 eggjs,国外的话推荐 nestjs
    lemon6
        34
    lemon6  
       2020-01-13 11:51:07 +08:00
    koa2
    SaintSeiya
        35
    SaintSeiya  
    OP
       2020-01-13 12:00:33 +08:00
    @mytharcher 多谢老哥
    lihongming
        36
    lihongming  
       2020-01-13 12:21:22 +08:00
    老外已经开始流行 serverless 了,可惜 AWS 进不了中国
    liangfengbo
        37
    liangfengbo  
       2020-01-13 13:45:28 +08:00
    用 koa2 写了个学习项目: https://github.com/LFB/nodejs-koa-blog 欢迎一起学习~
    npm
        38
    npm  
       2020-01-13 14:01:13 +08:00
    推荐 egg.js
    MYDTX
        39
    MYDTX  
       2020-01-13 14:02:52 +08:00
    ts
    ericls
        40
    ericls  
       2020-01-13 14:11:02 +08:00 via iPhone
    最近用 net 写了一个 挺好用
    shakaraka
        41
    shakaraka  
    PRO
       2020-01-13 14:12:40 +08:00
    nestjs
    MrBrand
        42
    MrBrand  
       2020-01-13 14:28:51 +08:00
    我的博客服务端用的 koa2 准备用 nestjs 改造下,主要是想学习使用 ts 哈哈
    lizheming
        43
    lizheming  
       2020-01-13 14:46:17 +08:00
    @mytharcher 可以考虑下 ThinkJS,基于 Koa2 的,文件即路由 ~
    kidult
        44
    kidult  
       2020-01-13 14:52:24 +08:00
    推荐 nestjs,感觉还是在写 java ..
    nianyu
        45
    nianyu  
       2020-01-13 14:56:30 +08:00
    只推荐 nest 或者轻量级的 express .
    egg 什么的一边去吧
    hillwall
        46
    hillwall  
       2020-01-13 14:58:18 +08:00
    nest,ts 一把梭
    iYoloyolo
        47
    iYoloyolo  
       2020-01-13 15:13:37 +08:00
    daruk 试一试
    jiangzm
        48
    jiangzm  
       2020-01-13 15:16:07 +08:00
    轻量一点的 koa 和 express,别用 egg
    wangyzj
        49
    wangyzj  
       2020-01-13 15:21:26 +08:00
    koa2
    不喜欢 egg 那种大集合
    zy445566
        50
    zy445566  
       2020-01-13 15:41:44 +08:00
    果断 koa2,自己想怎么改就怎么改
    tao1991123
        51
    tao1991123  
       2020-01-13 16:49:40 +08:00
    eggjs
    wee911
        52
    wee911  
       2020-01-13 17:48:00 +08:00
    nest.js 必须这个
    WittBulter
        53
    WittBulter  
       2020-01-13 19:09:58 +08:00   19
    1. Express 生态圈比较成熟,可用的中间件和设施也是最多的,但是比较臃肿而且最佳实践见仁见智,算是个比较中庸的选择。大家也比较熟就不多说了。

    2. Koa2 是我比较喜欢的设计理念,相对小巧,算是只有主菜,套餐自由组合。值得一提的是很多时候不需要那么多中间件比如在微服务或是 Serverless 上写东西更值得推荐,自由度很高。可惜社区太薄弱,参与贡献的人很少,很多设施更新很慢。如果你有一些很酷的想法或者想为 NodeJS HTTP 框架添加一些东西,为这款源码简短的框架写周边服务是再好不过的了。

    3. Fastify 是在性能上更优秀的库。我只在写一些极小的逻辑时才会用,基本只会在 Serverless 上使用。不过它的设计很巧妙,源码可以多读,给了我很大启发。它性能真的很高(作为 http 服务来说),如果你很看重性能可以尝试。

    4. Sails 是我早期在项目中用过最多的框架。Sails 是仿造 Rails 的 NodeJS 实现,总体来说算是实现了 Rails 的大部分设计,风格上保持主厨精选和约定优于配置,在这个框架下工作会非常的省心,效率非常高且优雅。缺陷也很明显:`waterline` 速度被人诟病已久,而且优于要做很多活所以性能较差,但大约和 Express 处于一个量级。很多地方源码的实现很脏,和 TS 结合不算友好,近年来的更新有些慢。如果你喜欢 magic 喜欢 ruby 风格可以试试。

    5. NestJS 本质上是一个更加全面的 routing-controller,设计上也大幅度借鉴了 Angular 和 routing-controller,不过只是一个骨架,可以结合 Express 或 Fastify,算是目前和 TS 结合的最好的框架。缺陷还是在 TS 的 ORM 数据验证这一块,由于没有自己实现所以推荐了 routing-controller 作者写的 class-validate,这个库的更新很慢而且问题比较多而且使用起来堆栈很高不是很理想,另外此框架是 IoC 类型所以代码量稍高,不过如果你喜欢大而全喜欢 TS 又喜欢写测试,这个框架是最推荐使用的。

    6. zeit/micro 是我见过 NodeJS 中最微型 Http 库,麻雀虽小五脏俱全,也受到很多人的热捧。非常推荐在微服务中使用,以前是 zeit 在 Serverless 上的首选,现在优于 now 的发展当然不需要了,也一直是我的最爱,代码量极低、小巧、高性能、设计优雅。社区有不少与此相关的周边库,作者也更新的快,非常值得信赖。不足的地方是文档少 (功能少所以文档少),如果没有一定的 NodeJS 基础会有些云里雾里。

    7. Hapi、Restify 等等这几个是我比较讨厌的,就不细说了,免得它们又有新用户。

    综合评价:
    性能偏执压测之子请选择 Fastify,
    宗教信徒快乐编程请选择 Sails,
    大道至简高人雅士请选择 zeit/micro,
    社区中坚力求变法请选择 Koa2,
    遵循法度统筹兼顾请选择 NestJS,
    以上都不是没有特别喜好请选择 Express。
    fsdrw08
        54
    fsdrw08  
       2020-01-13 20:25:35 +08:00 via Android
    nestjs,只用过这个,搭配 angular 使用很省心
    SaintSeiya
        55
    SaintSeiya  
    OP
       2020-01-13 20:50:24 +08:00
    @WittBulter 可以的老哥,多谢建议
    Rorysky
        56
    Rorysky  
       2020-01-13 23:55:34 +08:00   1
    nest nust next
    jprovim
        57
    jprovim  
       2020-01-14 07:26:16 +08:00
    hantsy
        58
    hantsy  
       2020-01-14 08:42:47 +08:00   1
    中庸的角度,Express 是首选,生态圈成熟,各种需要的东西都能找到,自己装配。
    快捷的,面向企业程序,Microservice:Nestjs,loopback,功能全面,拿来就用。
    codz
        59
    codz  
       2020-01-14 10:04:50 +08:00
    mark,学习. nestjs 待学.
    chrunlee
        60
    chrunlee  
       2020-01-16 09:11:37 +08:00
    没人用 thinkjs 么?
    meijie
        61
    meijie  
       2020-01-17 13:06:03 +08:00
    meijie
        62
    meijie  
       2020-01-17 13:06:37 +08:00
    seandor
        63
    seandor  
       2020-01-19 20:56:58 +08:00
    没人用 graphql 吗
    yafoo
        64
    yafoo  
       2020-01-20 23:54:24 +08:00 via Android
    iijs,我正在开发一个自己的 mvc 框架
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5283 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 08:39 PVG 16:39 LAX 00:39 JFK 03:39
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86