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

有没有简单易行的 nodejs web 框架推荐?

  •  
  •   monkingame · 2019 年 8 月 20 日 · 11150 次点击
    这是一个创建于 2343 天前的主题,其中的信息可能已经有所发展或是发生改变。

    要求很简单: 我想写一个 api server,能支持 async 操作,能最大程度兼容 expressjs。async 方便开发,避免回调嵌套;兼容 expressjs 可以尽可能利用更多的成熟模块。 egg.js 和 nest.js 稍微看过一点,我就是想写个简简单单的 api server,自己 post 过来参数自己解析处理( express 对 async 支持不好,否则就用他了),结果他们扔了一大堆概念下来,光熟悉框架就要好长时间,太重了。 谢谢!

    42 条回复    2019-11-19 02:35:16 +08:00
    wukongkong
        1
    wukongkong  
       2019 年 8 月 20 日 via iPhone
    koa ?
    mrcotter2013
        2
    mrcotter2013  
       2019 年 8 月 20 日 via Android
    Serverless 框架写 AWS Lambda,当然初期的学习成本还是有的
    sker101
        3
    sker101  
       2019 年 8 月 20 日 via iPhone
    不觉得 express 对 async await 兼容有多差 一直写 try catch 不觉得难受吗
    wdv2ly
        4
    wdv2ly  
       2019 年 8 月 20 日 via Android   ❤️ 1
    这种需求要什么框架,原生代码足够了
    gimp
        5
    gimp  
       2019 年 8 月 20 日
    cooi
        6
    cooi  
       2019 年 8 月 20 日
    我试过一个 adonisJs ,类似 rails 或者 laravel
    简单
    ochatokori
        7
    ochatokori  
       2019 年 8 月 20 日 via Android
    同一楼 koa
    如果规模大一点的话可以试试 egg.js
    再大一点就 egg.js + typescript
    shadowwalker2644
        8
    shadowwalker2644  
       2019 年 8 月 20 日 via Android
    Fastify,兼容 express
    alphanow
        9
    alphanow  
       2019 年 8 月 20 日 via Android
    koajs 或者 sailsjs
    wszgrcy
        10
    wszgrcy  
       2019 年 8 月 20 日 via Android
    还没人说 nestjs 那么我来了
    Oktfolio
        11
    Oktfolio  
       2019 年 8 月 20 日
    koa
    IamUNICODE
        12
    IamUNICODE  
       2019 年 8 月 20 日
    koa
    不过我这 express 也是用 async+await 组合
    spark
        13
    spark  
       2019 年 8 月 20 日   ❤️ 1
    Koa,但其实要简单就 Express,Koa 还要加路由、模板
    unclemcz
        14
    unclemcz  
       2019 年 8 月 20 日
    async 和框架关系不大,要看 nodejs 的版本。
    telun
        15
    telun  
       2019 年 8 月 20 日
    sails
    sam014
        16
    sam014  
       2019 年 8 月 20 日
    之前 node 版本不支持 async/await 的时候用的框架用了 bluebird 做了处理
    目前的 LTS 10.16.3 应该不用考虑这个问题吧
    liushuangbill
        17
    liushuangbill  
       2019 年 8 月 20 日
    express,没感觉哪里对 async 支持不好。。。
    miniwade514
        18
    miniwade514  
       2019 年 8 月 20 日
    koa. 如果连部署都懒得部署,直接用 Google 或者 AWS 的 Serverless 服务,写写函数就行了。
    xiaoyiyu
        19
    xiaoyiyu  
       2019 年 8 月 20 日
    connect 早期 express 就引用这个依赖做的
    xiaoyiyu
        20
    xiaoyiyu  
       2019 年 8 月 20 日
    @mrcotter2013 5.0 优化了,支持 promise 的错误处理
    mikoshu
        21
    mikoshu  
       2019 年 8 月 20 日
    express 对 async 支持不好 不懂咋理解 是否可以给出情景或者示例~
    userdhf
        22
    userdhf  
       2019 年 8 月 20 日
    9102 年了都,express 还对 async 和 awaite 支持不好?
    koa 都要黄了吧?
    menyakun
        23
    menyakun  
       2019 年 8 月 20 日
    nestjs 来了
    wozhizui
        24
    wozhizui  
       2019 年 8 月 20 日
    egg
    sjtiande
        25
    sjtiande  
       2019 年 8 月 20 日
    nestjs
    lllllliu
        26
    lllllliu  
       2019 年 8 月 20 日
    ThinkJS
    Ixizi
        27
    Ixizi  
       2019 年 8 月 20 日 via Android
    vuejs
    momocraft
        28
    momocraft  
       2019 年 8 月 20 日
    写 api server 看 web framework 是不是方向有问题
    Hanggi
        29
    Hanggi  
       2019 年 8 月 20 日
    typescirpt + koa 是正解。
    StarkWhite
        30
    StarkWhite  
       2019 年 8 月 20 日
    搭配 GraphQL 的一般都 6 得飞起:
    koa-graphql
    egg-graphql
    nestjs/graphql
    ...
    其它自行搜索
    monkingame
        31
    monkingame  
    OP
       2019 年 8 月 20 日
    感谢各位的热心指导,已经选择了 koa,其实和 express 差不多,不过 koa 似乎更简洁一些。
    而且就是个 API server,用不到那么多复杂的功能,一下午简单熟悉了下 koa,基本就能上手了。
    再次感谢!
    enjoyCoding
        32
    enjoyCoding  
       2019 年 8 月 22 日
    @sker101 async await 不都是这样吗? 不用 express 也一样啊. 我记得之前看到一个 webpack 的插件 就是自动给 async 和 await 包裹 try catch 的。
    zivyou
        33
    zivyou  
       2019 年 8 月 27 日
    推荐 koa
    monkingame
        34
    monkingame  
    OP
       2019 年 8 月 28 日
    再次回复,又切回 express 了,无语。。。

    原因:
    koa 有很奇特的小问题,暂时找不到问题原因。出于对未知坑的恐惧,只好选择 express 了。

    问题现象:
    就是写了个简单的 api server,根据 App 端请求返回 json 数据。
    客户端用的 flutter,由于要播放视频(用的 video_player ),加上我懒,简单的加了个 static 中间件,然后把 mp4 文件放在 static 目录下,App 直接播放服务端视频就可以了。按理说这很简单了,而且我用浏览器测试了视频,可以正常播放,服务端也没有任何问题。但是 App 访问时,服务端出现了错误:
    Error: write EPIPE
    at WriteWrap.afterWrite [as oncomplete] (net.js:788:14)
    并且 App 不能播放视频。
    我 Google 了一通,也没找到很合适的答案。我怀疑是不是 App 端有问题,或者 video_player 本身有问题。但我直接 hard coding 公网服务器的视频,App 能正确播放。

    但是,当我用 express 重写了一下,也是用的同样的视频文件,用 express static 中间件,还是刚才的 App (一个字节都没改写的),结果就没事了! App 视频完美播放,server 端没有任何错误提示!

    神奇的现象,折腾了一晚上之后,决定放弃 koa,换成 express。
    当然,有可能是我配置的 koa 不对,造成某些类型文件不能正确下发,比如对视频文件特殊处理等。但我用浏览器可以正常访问 koa 视频文件,预览正常,服务端没错误。
    还好写的不多,一早上就把代码迁过去了(幸好 koa 和 express 差别也不大,都是 js 的框架,也有渊源)。
    但是这个 EPIPE 错误一直没有解决,心里头总觉得膈应。
    有哪位大佬有解决方案的,敬请指教,非常感谢!

    结论:
    api server 还是 express 吧。至少在 static 方面,我不知道如何解决 koa 的 EPIPE 问题。
    jawnkuin
        35
    jawnkuin  
       2019 年 9 月 1 日
    function compute
    crazymad
        36
    crazymad  
       2019 年 9 月 2 日
    @monkingame 静态资源一般直接放 nginx 之类的服务器不就好了
    monkingame
        37
    monkingame  
    OP
       2019 年 9 月 2 日
    @crazymad 谢谢。因为是在测试期间,我又懒,就随便搞个 static 中间件凑合着。
    jiangzhuo
        38
    jiangzhuo  
       2019 年 9 月 2 日
    nestjs
    libook
        39
    libook  
       2019 年 9 月 5 日
    开发的时候静态资源直接放 Nginx 吧,企业级线上方案都是用 CDN,用 Node.js 来 host 静态文件性价比太低。

    要是只想写写 Web API 找个最简便的框架,Koa 是最合适的,Static 已经跟 Web API 关系不太大了;但不管用什么技术都得了解内部原理,就像以前经常有人拿 C#当 Java 用,就感到处处碰壁。

    或者自己拿 Node.js 的原生 http 模块写 API 其实也挺快的,只需要看看 API 文档以及了解一下 Stream 就行了。
    chenhui7373
        40
    chenhui7373  
       2019 年 9 月 7 日
    cabloy
    hentaicracker
        41
    hentaicracker  
       2019 年 9 月 17 日
    routing-controllers 了解一下
    xcstream
        42
    xcstream  
       2019 年 11 月 19 日
    express 对 async 支持不好 问号
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2867 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 14:33 · PVG 22:33 · LAX 06:33 · JFK 09:33
    ♥ Do have faith in what you're doing.