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

Node 后端使用 express 还是 koa?

  •  
  •   MrCard · 2019-04-24 16:29:28 +08:00 · 19554 次点击
    这是一个创建于 2070 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想把个人网站的后端换成 Node,但是对两个框架犹豫不决,哪个综合来看好点呢?或者企业用的比较多的是哪个?

    第 1 条附言  ·  2019-04-24 21:47:13 +08:00
    统计提的比较多的几个:
    nest:7
    express:5
    koa:3
    egg:3
    70 条回复    2020-09-28 11:10:58 +08:00
    MicroPan
        1
    MicroPan  
       2019-04-24 16:37:10 +08:00
    推荐 egg
    UIXX
        2
    UIXX  
       2019-04-24 16:39:39 +08:00
    这个问题就相当于你去买电脑,问是买带外设的套装电脑好还是不带外设的独立主机好。

    express 跟 koa 在性能上并没有什么区别,只是在软件工程上面有着它们的设计倾向。
    一个是大而全,省事。一个是小而精,定制化容易。

    对于个人网站来说,两个都一样。
    polun
        3
    polun  
       2019-04-24 16:40:18 +08:00
    会哪个用哪个;
    如果都不会,随便挑一个;
    如果都会,你应该自己可以决定。
    johnnyNg
        4
    johnnyNg  
       2019-04-24 16:43:06 +08:00
    nestjs 吧,基于 express,
    whypool
        5
    whypool  
       2019-04-24 16:57:46 +08:00
    nuxt
    tao1991123
        6
    tao1991123  
       2019-04-24 17:01:15 +08:00
    eggjs
    tao1991123
        7
    tao1991123  
       2019-04-24 17:01:46 +08:00
    喜欢 Typescript 和类 java 的依赖注入的话 试试 midwayjs
    love
        8
    love  
       2019-04-24 17:04:21 +08:00
    @UIXX 这二个哪个是大而全?
    Blackricky
        9
    Blackricky  
       2019-04-24 17:04:43 +08:00   ❤️ 1
    忘了在哪看到这句话了: express 全 fastify 快 nest.js 稳
    fakeshadow
        10
    fakeshadow  
       2019-04-24 17:07:10 +08:00
    我觉得 fastify 蛮好用的
    kzfile
        11
    kzfile  
       2019-04-24 17:08:54 +08:00
    曾经用 koa,现在直接 express,直接用现成的也没什么问题
    Karpov
        12
    Karpov  
       2019-04-24 17:13:37 +08:00
    用过 express 还行。我反正是抄 real-world 的。node 后端它只有这么一种实现。
    MrCard
        13
    MrCard  
    OP
       2019-04-24 17:17:36 +08:00
    看了大家的回复更想哭了。。。
    251243021
        14
    251243021  
       2019-04-24 17:17:40 +08:00
    以前用 koa.觉得精简.后来出了 koa-router 时间.发现生态真心不能等.重新回到 express.发现都那样.如果喜欢 ts 都可以直接上 nest.js
    meteor957
        15
    meteor957  
       2019-04-24 17:19:46 +08:00
    nest 可以看看
    des
        16
    des  
       2019-04-24 17:24:59 +08:00
    推荐 nest
    des
        17
    des  
       2019-04-24 17:27:06 +08:00
    个人网站啊,那随意
    1KN6sAqR0a57no6s
        18
    1KN6sAqR0a57no6s  
       2019-04-24 17:29:23 +08:00
    http 和 net 选一个
    zander1024
        19
    zander1024  
       2019-04-24 18:06:41 +08:00
    随便都一回事,要我建议别用 node
    66beta
        20
    66beta  
       2019-04-24 18:24:17 +08:00 via Android
    个人网站干什么的,静态 blog 系统满足不了吗?
    WittBulter
        21
    WittBulter  
       2019-04-24 18:32:41 +08:00
    @tao1991123 喜欢注入风格不妨看看我整理的这个 Guide: https://github.com/WittBulter/koa2-typescript-guide
    guiling
        22
    guiling  
       2019-04-24 18:57:40 +08:00 via Android
    就你说的这两个的话用 express,node 早就支持 promise 了,其他跟 koa 没啥区别,就多几个内置中间件
    dr2009
        23
    dr2009  
       2019-04-24 19:37:37 +08:00
    nest/egg
    Nasei
        24
    Nasei  
       2019-04-24 19:47:37 +08:00
    我记得我还上学的时候, 学 node, 当时就有这俩框架了, 然后当时的教程说 koa 是新的, 要替代 express ... 看起来过了几年这事没实现啊
    stellar
        25
    stellar  
       2019-04-24 22:27:52 +08:00 via iPhone
    fastify
    laogui
        26
    laogui  
       2019-04-24 23:15:40 +08:00 via Android
    nest 实在太优雅了,强烈推荐。
    Sparetire
        27
    Sparetire  
       2019-04-25 01:32:28 +08:00 via Android
    fastify,或者 nest+fastify
    viko16
        28
    viko16  
       2019-04-25 01:42:05 +08:00 via Android
    投 eggjs
    tyrealgray
        29
    tyrealgray  
       2019-04-25 01:50:26 +08:00 via Android
    Fastify 现在号称是最快的 nodejs 框架
    version
        30
    version  
       2019-04-25 02:10:07 +08:00   ❤️ 2
    写了 3 年的 nodejs
    我推荐还是 koa 大系统用 Fastify.
    别学 ts 语法

    写无状态服务用 koa 以后都是云函数服务
    然后写代码别 mvc 架构.多用 api Gateway 写法.也利于分部署部署
    别加载太多各种依赖..一个简单的 http 服务不需要那么多东西..
    处理好异常.数据库连接.那些就基本够了.

    如果这些都懂了..学门其它语言吧
    nodejs 不适合高并发业务.做做后台管理系统 api 还可以.不过普通小企业还是很适合的.创业公司.有钱和谐微服务转 go
    chengluyu
        31
    chengluyu  
       2019-04-25 02:41:02 +08:00
    果断 fastify,带验证可以避免很多错误
    wee911
        32
    wee911  
       2019-04-25 07:15:20 +08:00
    nest
    kethylar
        33
    kethylar  
       2019-04-25 07:51:23 +08:00 via Android
    https://2018.stateofjs.com/back-end-frameworks/overview/
    为啥没人推荐 nextjs(不是 nestjs),谁能解解惑吗
    smallX
        34
    smallX  
       2019-04-25 08:12:49 +08:00 via Android
    果断上 go
    crazyrock
        35
    crazyrock  
       2019-04-25 08:35:09 +08:00
    越看越不靠谱。还有让转 Go 的
    guiling
        36
    guiling  
       2019-04-25 08:55:25 +08:00 via Android
    @version node 不就是做高并发的么,怎么到你这儿就不适合了
    heimeil
        37
    heimeil  
       2019-04-25 08:59:34 +08:00
    @kethylar nextjs 不是前端框架吗?基于 react 的
    FakeLeung
        38
    FakeLeung  
       2019-04-25 09:10:51 +08:00
    @heimeil #37
    @whypool #5
    老铁,你们一个 react 一个 vue 的 ssr 框架,是认真的吗?
    GiantHard
        39
    GiantHard  
       2019-04-25 09:35:22 +08:00
    写过 eggjs 之后,感觉还是 nest 比较适合我
    mingsz
        40
    mingsz  
       2019-04-25 09:42:43 +08:00
    koa
    ilaipi
        41
    ilaipi  
       2019-04-25 09:55:13 +08:00
    看了大家的回复,有点想试试 nest 了,但是看了一眼,优先 ts,感觉有点难以接受。我是不打算写 ts,不然当初也没必要从 java 转过来 node。有用 nest 不用 ts 的吗?
    nineyang
        42
    nineyang  
       2019-04-25 10:02:03 +08:00
    没人推荐 sails 么
    nigelvon
        43
    nigelvon  
       2019-04-25 10:06:03 +08:00
    长期维护的项目还是推荐基于 ts 的比如 nest,短期一次性项目 koa 吧。express 的中间件不是洋葱圈有点难受。
    thomaspaine
        44
    thomaspaine  
       2019-04-25 10:18:06 +08:00
    @nineyang 看了下,感觉不灵活啊,还是 nestjs 好点
    Justin13
        45
    Justin13  
       2019-04-25 10:37:55 +08:00 via Android
    koa2 啊
    thonatos
        46
    thonatos  
       2019-04-25 10:55:58 +08:00
    这种问题最好的解法就是:都用一遍,哪个顺手用哪个。

    当然,我个人推荐 Egg.js ,什么依赖注入啊,不太感冒,没法儿,谁让我是 Java 黑呢
    cuzfinal
        47
    cuzfinal  
       2019-04-25 11:12:40 +08:00
    用 nest
    CodingNaux
        48
    CodingNaux  
       2019-04-25 12:35:37 +08:00 via iPhone
    不选 node
    version
        49
    version  
       2019-04-25 14:47:05 +08:00
    @guiling 例如订单和数据库相关的事务方面的.nodejs 不适合做业务核心高并发的....做做分发前端渲染那些还可以.
    winnie2012
        50
    winnie2012  
       2019-04-25 14:49:59 +08:00
    fastify
    version
        51
    version  
       2019-04-25 14:52:28 +08:00
    @ilaipi 我也是 java 转 nodejs 也有 3 年了..nodejs 优势是比 java 强太多了...这样说可能很多人不爽我..不过我外包或者普通 crud 基本也是 nodejs 写的了..包括小游戏..普通接口压力.nodejs 还是很个给力的..一个没经验的 java 写的并发或者普通企业写的接口可能差过我 nodejs....现在 nodejs 对于大数据处理还是瓶颈很大..我 nodejs 原生+es6 我觉得非常完美的方案了..高并发核心模块用 rpc 转 go 来写..
    go 也是下一个趋势了.省内存.快捷..java 就算了.都是吹 ppt 的.我见多了.实际业务代码能力差的很..我对国人写 java 很伤心了.
    ilaipi
        52
    ilaipi  
       2019-04-25 15:06:24 +08:00
    @version #51 握爪,我也是差不多 15 年转 node 的,现在公司项目全线 node。模块化拆分,独立发布我觉得都很方便了。

    go 目前还用不上,以后再说。

    我觉得确实是存在一批能力很差的生存在底层的程序员,业务代码能力非常差。

    不过 java 也有点优势。比如我们最近项目 mq 选型选了 rocketmq,买了阿里的服务,结果只有 java 的客户端比较完善,node 的客户端一塌糊涂,并且没有进展,绝望.jpg
    puilu
        53
    puilu  
       2019-04-25 15:17:42 +08:00
    express 稳一点吧,那些口口声声要代替 express 的至今感觉都有气无力了。
    kingterrors
        54
    kingterrors  
       2019-04-25 15:48:29 +08:00
    看样子没人用 hapi。。
    我公司项目都是 eggjs。基于 koa 封装的,比较容易上手。
    个人的话,我觉得随便哪个都行吧,看哪个 logo 好看就用哪个哈哈哈。
    marsgt
        55
    marsgt  
       2019-04-25 15:53:16 +08:00
    印象里《 Node 实战》里有基础框架的横向对比,讲选型策略的时候给了些建议都挺实用
    version
        56
    version  
       2019-04-25 16:16:06 +08:00
    @ilaipi 消息队列的还好..有 http 协议就自己封装一个 sdk 单例使用..我觉得就够了..如果不是特别多业务的.可以自己 redis 写.

    麻烦的是走 socket 协议的一些 rpc 断连就会出事.又或者重复发送.
    version
        57
    version  
       2019-04-25 16:20:12 +08:00
    @kingterrors egg 是 kpi 的产物..看看他们的代码就好..
    自己用就还是自己搭建一个就够了.其实写个接口服务.不需要那么多东西的...

    hapi 就非常垃圾了.整一个 mvc 的做法.弄一套自己的标准..背离了用 nodejs 特性的初衷..
    写无服务的模块化才是未来的发展.哪个不爽重写就好.不用担心其它代码依赖
    ilaipi
        58
    ilaipi  
       2019-04-25 16:23:51 +08:00
    @version #57 选 rocketmq 的原因主要是因为有延迟消息的功能。我们的业务场景里有很多需要一定时间后触发的。不想搞任务系统,我就想用 mq 来实现。
    ilaipi
        59
    ilaipi  
       2019-04-25 16:25:07 +08:00
    @kingterrors #54 koa 和 express 貌似 log 都是需要自己加载中间件的
    Gea
        60
    Gea  
       2019-04-25 16:26:56 +08:00
    nest
    busfool
        61
    busfool  
       2019-04-25 17:47:05 +08:00
    只用过 express
    ngloom
        62
    ngloom  
       2019-04-25 17:51:29 +08:00
    adonisjs...
    kingterrors
        63
    kingterrors  
       2019-04-25 21:24:10 +08:00
    @ilaipi 所以我选择了 eggjs,封装好了很多,还能接入阿里云的 node 监控方便啦
    kingterrors
        64
    kingterrors  
       2019-04-25 21:27:07 +08:00
    @version 哈哈,所以 hapi 我就用于自己测试瞎折腾,我是个好奇心重的人,一有啥新东西就想试试看看有没有什么惊奇的发现~~~
    用于生产环境我一般都是 eggjs,之前自己用 koa2 从 0 手工一步步搭起来,项目跑通了各种毛病,然后领导说你咋不用 eggjs,我就重构成 eggjs 了,因为,我开发时间也是比较紧张的。nodejs 开发经验不足的情况下在工作中也不敢瞎折腾了= =!
    OSF2E
        65
    OSF2E  
       2019-04-25 21:31:00 +08:00
    version
        66
    version  
       2019-04-26 02:04:38 +08:00
    @kingterrors 其实 eggjs 也没很多东西.基本封装个 class 都全了..不过要看自己经验了.. 阿里云 node 监控还是少用..性能比较低..它改了 nodejs 的底层..而且版本升级太慢...如果你要集群部署..用原生的好+es6 不要加其它编译了.
    nodejs 新版本启动基本也就 50m.压测后.gc 后也稳定 100m 的状态
    cl903254852
        67
    cl903254852  
       2019-04-27 17:25:29 +08:00
    如果是新手 建议 Koa2,如果不是新手,建议 Nest
    UniKylin
        68
    UniKylin  
       2019-05-05 15:46:30 +08:00
    推荐用 egg 吧
    chenhui7373
        69
    chenhui7373  
       2019-05-20 11:06:07 +08:00
    @version koa 不是刀耕火种自己搞。。。我觉得还是用 Nestjs 省心。。。

    前辈有推荐的技术栈(技术架构)吗?
    dhswg20077
        70
    dhswg20077  
       2020-09-28 11:10:58 +08:00
    个人网站还是 hugo 省心。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1015 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:46 · PVG 04:46 · LAX 12:46 · JFK 15:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.