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

请教 Node.js 后端框架的选择

  •  
  •   Chism · 2022-03-28 17:48:16 +08:00 · 15864 次点击
    这是一个创建于 1000 天前的主题,其中的信息可能已经有所发展或是发生改变。
    之前一直做前端,没用过 nodeJS 后端框架

    目前需求是这样:
    1. 后端数据库存储数据,同时给 C 端前端提供 api 进行 curd
    2. 后端需要对接第三方 api
    3. 给 B 端提供后台管理网页

    哪个框架满足上述需求并且易于上手?

    背景:有 thinkphp 开发后端的经验、有简单的 nodejs 脚本开发经验

    选 node 不选 php 原因:npm 比 composer 丰富;很久没碰 php ;对 js 语言足够熟练
    第 1 条附言  ·  2022-03-30 18:11:52 +08:00
    express 据说基于 es5 ,不支持 await 等新特性
    KOA 基于 es7
    这两个框架是同一个作者
    75 条回复    2022-10-28 10:41:12 +08:00
    golangLover
        1
    golangLover  
       2022-03-28 17:53:10 +08:00 via Android   ❤️ 4
    nest.js
    iwdmb
        2
    iwdmb  
       2022-03-28 17:54:09 +08:00
    需求不複雜的話:Express.js

    https://github.com/expressjs/express
    Chism
        3
    Chism  
    OP
       2022-03-28 18:03:09 +08:00
    @iwdmb
    周下载量 24,602,530 ,这个绝对可以
    awesomes
        4
    awesomes  
       2022-03-28 18:07:55 +08:00
    express 和 koa 是偏底层的,nestjs 和 egg 是高一层的,刚刚恰好在看 nestjs ,很完善很强大,不过可能不适合你入门
    Chism
        5
    Chism  
    OP
       2022-03-28 18:12:21 +08:00
    @iwdmb
    Express 配合 mongodb 好还是 mysql ?
    libook
        6
    libook  
       2022-03-28 18:28:59 +08:00   ❤️ 4
    Express 用户量最大,本身包含一些组件(中间件)可以较快速搭建出一个 web 服务出来。
    koa 也是比较主流的框架,采取微内核的设计,主体只包含 web 服务核心部分,需要其他功能可以自己找相应的组件(中间件)进行搭配。

    因为很多框架提供的组件都适用于通用的业务,无法满足特定特殊业务场景,所以我使用最多的是 koa ,有现成的组件可以拿来用就用现成的,没有能直接用的就自己写一个。

    当然前面楼提到的其他的框架也可以看看,就是复杂度可能会比这两个高一些,有些是从其他语言的框架思想借鉴过来的。

    一般 Node.js 的教程会推荐使用 MongoDB ,因为从服务程序到数据库操作都是使用 JS/JSON 这一套的,实际上没有所谓搭配哪个好、搭配哪个不好。
    用什么数据库取决于你的数据特征,比如树状结构的数据可能适合非关系型数据库,而实体间关系较多的适合关系型数据库。每种数据库可能为 Node.js 提供了驱动包可以直接用,或者使用 sequelize 之类的 ORM 。

    后台管理网页可以像 PHP 那样使用模板机制渲染,如 EJS 模板引擎,或者 PUG 模板引擎;也可以考虑做成前后端分离的方案,比如另起一个前端项目用 React 或 Vue 写。
    indo
        7
    indo  
       2022-03-28 19:10:25 +08:00   ❤️ 1
    express 挺舒服的。B 端管理随便用 react 或者 vue 撸一个然后 express 的 statics 暴露下打包好的目录就好了
    catinsides
        8
    catinsides  
       2022-03-28 19:13:37 +08:00
    nestjs, nextjs, nuxtjs, 看你会哪个前端框架
    acthtml
        9
    acthtml  
       2022-03-28 19:20:03 +08:00
    熟悉 typescript:midwayjs, nestjs 。
    不熟悉:eggjs 。
    gouflv
        10
    gouflv  
       2022-03-28 19:28:15 +08:00 via iPhone
    首先排除 nestjs ,thinkjs 可以考虑
    edward1987
        11
    edward1987  
       2022-03-28 19:38:38 +08:00
    eggjs, 用不用 ts 都支持
    sgiyy
        12
    sgiyy  
       2022-03-28 19:43:48 +08:00
    @gouflv #10 thinkjs 一年多了作者自己都不咋维护了
    ysc3839
        13
    ysc3839  
       2022-03-28 19:57:44 +08:00 via Android
    项目不复杂的话我会选择 Koa ,访问数据库用 TypeORM ,如果需要后端渲染的话用 ejs 模板引擎
    前面有人提到 Express.js ,但是这个库在配合 async function 时有坑(不是不兼容 async function ,而是会遇到一些问题,要额外写代码解决)
    angrylid
        14
    angrylid  
       2022-03-28 19:59:54 +08:00 via Android
    laravel 不考虑下吗。
    Chism
        15
    Chism  
    OP
       2022-03-28 20:02:40 +08:00 via Android
    @angrylid 放弃 php 了
    shuimugan
        16
    shuimugan  
       2022-03-28 20:07:41 +08:00   ❤️ 1
    快速出活而且维护频率低的用 https://github.com/directus/directus ,设计好表结构一天出成果
    不断迭代的用 nest.js
    iwdmb
        17
    iwdmb  
       2022-03-28 20:40:23 +08:00
    @Chism
    >> Express 配合 mongodb 好还是 mysql ?
    這是一個可大可小的問題,如果你不確定怎麼選的話:MySQL
    有個久經考驗的 Transaction 必要的時候可以幫助你
    meteor957
        18
    meteor957  
       2022-03-28 20:54:46 +08:00
    nest
    mikurasa
        19
    mikurasa  
       2022-03-28 20:57:36 +08:00
    可以试试 Serverless ,出活比 mvc 框架快多了 推荐 faas.js
    shiny
        20
    shiny  
       2022-03-28 21:19:40 +08:00
    fastify ,adonisjs
    musi
        21
    musi  
       2022-03-28 21:47:10 +08:00
    小项目 express ,koa
    大项目 nest egg
    hhhanako
        22
    hhhanako  
       2022-03-28 22:02:25 +08:00
    next + prisma
    Rocketer
        23
    Rocketer  
       2022-03-28 22:03:03 +08:00 via iPhone
    上 Serverless 吧,省钱还省工作量,反正都是新学一个框架
    mashirozx
        24
    mashirozx  
       2022-03-29 00:29:11 +08:00 via Android
    nest.js 可能是最成熟的 node 后端框架了吧
    joyqi
        25
    joyqi  
       2022-03-29 01:16:17 +08:00
    koa + typeorm
    ericls
        26
    ericls  
       2022-03-29 05:17:07 +08:00 via iPhone
    scyuns
        27
    scyuns  
       2022-03-29 08:38:44 +08:00
    推荐 nestjs
    sjhhjx0122
        28
    sjhhjx0122  
       2022-03-29 08:42:50 +08:00
    学了 nestjs 差不多就顺手大概会了 angular 何乐不为呢
    star7th
        29
    star7th  
       2022-03-29 08:59:27 +08:00   ❤️ 4
    作为一个 php 跟 nodejs 都熟悉的人,个人猜测你问出这个问题,应该不是高手,所以我推荐你使用易上手的 eggjs 框架。不使用 Express 和 koa 是因为这两个框架太基础,很多东西要你手动再写。不使用 midwayjs, nestjs 是因为它们的概念理解对新手会造成更多心智负担(指的是相比 eggjs ),且中文文档不够丰富。
    leisure
        30
    leisure  
       2022-03-29 09:23:07 +08:00
    strapi 考虑下? 上个 pg 做数据库挺好用的
    pkoukk
        31
    pkoukk  
       2022-03-29 09:41:26 +08:00
    koa 和 express 都可以,但是 db 千万不要用 mongo ,辣鸡
    horizon
        32
    horizon  
       2022-03-29 09:45:47 +08:00
    nestjs , 原生支持 ts 很重要
    Chism
        33
    Chism  
    OP
       2022-03-29 10:13:14 +08:00
    @pkoukk
    考虑 mongo 因为数据结构跟 json 兼容,方便处理
    hotsymbol
        34
    hotsymbol  
       2022-03-29 10:16:37 +08:00
    deno
    scr
        35
    scr  
       2022-03-29 10:18:17 +08:00
    nestjs 。
    还要再快的话,试试 strapi ,外包利器。
    terranboy
        36
    terranboy  
       2022-03-29 10:22:16 +08:00
    nest.js
    leoskey
        37
    leoskey  
       2022-03-29 10:30:38 +08:00   ❤️ 1
    koa.js 和 express.js 最大区别在于处理网络请求处理模型,前者为洋葱模型,后者为管道。
    nest.js 这类有控制器、中间件、过滤器等概念,更符合 Java 、C# 开发逻辑。
    要说新手容易上手,还得是 express.js ,概念较少,官方轮子够多
    santom
        38
    santom  
       2022-03-29 10:30:56 +08:00
    nestjs 感觉不错
    lmshl
        39
    lmshl  
       2022-03-29 12:06:23 +08:00   ❤️ 5
    作为一个老 Node.TS 开发者,给你些框架选型建议
    NestJS:不建议裸用 koa/express ,他们是底层框架,在其上实现拦截器 /身份认证 /三方登录等需要花费的时间要多很多。
    Prisma2: 作为 TypeORM 早期贡献者,我不推荐你在 2022 年的今天还使用 TypeORM ,Prisma2 的工具链和开发体验都非常流畅。

    你还可以考虑下 postgresql ,既可以用 JSONB 存储,又不丢失 ACID 的所有好处
    lmshl
        40
    lmshl  
       2022-03-29 12:07:31 +08:00
    lmshl
        41
    lmshl  
       2022-03-29 12:08:36 +08:00
    再给你一个我自己的热身项目,就是用我上面说的技术栈,并且还支持 Serverless 部署。
    guanhui07
        42
    guanhui07  
       2022-03-29 12:10:18 +08:00
    koa2
    boxz
        43
    boxz  
       2022-03-29 12:16:35 +08:00
    nestjs ,要 crud 搭配 nestjs-query ( graphql )或 @nestjsx/crud ( restful )
    gstarcad
        44
    gstarcad  
       2022-03-29 14:26:15 +08:00
    轻量底层框架:fastify 、express
    上层框架:NestJS

    其它观点同#39 楼
    qq30545
        45
    qq30545  
       2022-03-29 14:28:58 +08:00
    我也新手
    推荐 Fastify + Cloud Run
    Express 就算了吧
    1543544726zy
        46
    1543544726zy  
       2022-03-29 14:29:40 +08:00
    koa + mogoose
    byte10
        47
    byte10  
       2022-03-29 14:34:17 +08:00
    目前需求是这样:
    1. 后端数据库存储数据,同时给 C 端前端提供 api 进行 curd
    2. 后端需要对接第三方 api
    3. 给 B 端提供后台管理网页

    你直接上 koa2 ,吊打所有框架。这样的业务最好用 koa2 了,非常 nice 的一个框架,核心代码就 100 行,牛逼就是了。脚本语言简单。koa2 的比较基础,迁移到 serverless ,云函数,云小程序,都非常的方便。
    fstar
        48
    fstar  
       2022-03-29 14:36:15 +08:00
    Nest.js

    Express 和 Koa2 就算了,过时了,过于底层,好比你用 jq 写网站一样过于简陋。社区也不活跃。
    qfdk
        49
    qfdk  
       2022-03-29 15:02:29 +08:00   ❤️ 1
    还是 Express 吧,说实话这个写起来还是很舒服的,我把公司 微服务都换成 Express 了。 还是 Express 好用,Nest.js 上层的东西太多了。 问题很大,如果搞不明白 Nest.js 里面的 运行原理 感觉就跟 Spring Boot 莫名其妙的的升个级就挂了。。。 用 Express 的话 逻辑大多都是自己的,然后项目结构合理,很方便的。
    daizige
        50
    daizige  
       2022-03-29 15:34:12 +08:00
    @star7th 非常赞同
    jsq2627
        51
    jsq2627  
       2022-03-29 15:36:23 +08:00
    不妨试试 remix.js ,虽然比较新但是确实很棒
    terranboy
        52
    terranboy  
       2022-03-29 16:04:51 +08:00
    @jsq2627 REMIX.RUN 吗 他算是个全栈框架 输出 API 不太适合,按照楼主的需求 简单点的 NEXT.JS+PRISMA 就能胜任
    helloworld1024
        53
    helloworld1024  
       2022-03-29 17:04:17 +08:00
    建议你放弃使用 nodejs 做后端
    zy445566
        54
    zy445566  
       2022-03-29 17:10:36 +08:00
    用 express ,其实不如用 koa 更现代一点点。不过要大而全集成可以试试 nest.js 。用 node.js 后端开发 5 年了,很爽
    LawlietZ
        55
    LawlietZ  
       2022-03-29 17:27:32 +08:00
    egg
    OxO
        56
    OxO  
       2022-03-29 17:41:55 +08:00
    原是 Javaer ,不喜欢在 node 系也使用 Spring 注解那一套东西,目前在用 koa2 + mongoose + ts ,挺喜欢的。
    vincentxue
        57
    vincentxue  
       2022-03-29 17:51:02 +08:00
    我同意 #29 的观点。

    最适合你的框架应该就是 egg.js ,因为它足够简单但是功能又很强,已经封装了绝大多数日常需要的功能。底层就是 koa ,如果你要从 koa 或者 express 这些起步,光是搭架子都得很久。用 egg 的话新建一个项目就可以直接开撸了,cluster 啥的也都帮你弄好了,你只需要一句命令的的事。orm 用 sequelize 之类的就好了。

    nest 那些是有学习成本的,你需要了解它的概念,还得自己搭架子等等。

    如果你是开一个大的长期的项目,那可以考虑用 nest ,毕竟是流行趋势,趋势不可挡。

    db 用什么是跟你的业务有很大关系的,如果你不知道选什么,就选 mysql 好了。
    pkoukk
        58
    pkoukk  
       2022-03-29 18:09:31 +08:00
    @Chism pg 也支持 json 。
    但是一般不需要存 raw json 进去,找一些 orm 框架更合适。
    存一堆 json 进 mongo 里,最常见到的事情就是里面有一大堆奇怪的数据,一会儿这条缺字段,一会儿那条字段数据格式不对,处理数据处理到头秃
    immortalz
        59
    immortalz  
       2022-03-29 18:30:31 +08:00 via Android
    eggjs ,正如 57 楼说的一样,eggjs 约定式的方式,很多东西都不用纠结中间件怎么技术选型,不同中间件之间混搭踩坑之类的
    Chism
        60
    Chism  
    OP
       2022-03-29 18:38:43 +08:00
    @pkoukk
    确实有这个问题,我还遇到过 input 标签的数字直接插入导致 mongo 里本来放 number 的一部分是 string
    HanMeiM
        61
    HanMeiM  
       2022-03-29 19:04:39 +08:00
    话说 egg 是阿里开源的吗?阿里的开源软件敢用吗?
    ychost
        62
    ychost  
       2022-03-29 19:33:28 +08:00
    koa 用过最好用的,想怎么扩展加中间件就好了,用起来爽的一笔,node 不是 JAVA 没必要用注解,即使 node 按 java 一样规范了,后期维护还是比较困难
    cutchop
        63
    cutchop  
       2022-03-29 20:10:56 +08:00
    koa 啊,js 不就是怎么爽怎么来吗,不要搞 java 那一套
    bthulu
        64
    bthulu  
       2022-03-29 21:04:40 +08:00
    @lmshl nestjs 底层 HTTP 框架选啥呢, platform-express 还是 platform-fastify?
    inhal
        65
    inhal  
       2022-03-29 22:05:51 +08:00 via Android
    AdonisJS ,你会找到 Laravel 的感觉
    ccraohng
        66
    ccraohng  
       2022-03-30 10:10:00 +08:00
    koa express 不是 demo 产生器吗?求求不要推荐害人了
    或者你要自己根据这两个当作底层写框架?
    agileago
        67
    agileago  
       2022-03-30 17:02:09 +08:00
    express,koa,eggjs 写完会让你产生在写玩具的感觉,很脆弱,现在写 Node 后端无脑 nestjs
    eephee
        68
    eephee  
       2022-03-31 22:50:23 +08:00
    nest.js 有公司招人吗?前后端都会点
    chenyu0532
        69
    chenyu0532  
       2022-04-01 15:18:56 +08:00
    现在正在用 egg ,我感觉很不错。
    阿里为数不多的良心产品
    chenyu0532
        70
    chenyu0532  
       2022-04-01 15:21:54 +08:00
    作为一个前端仔,没有后端经验,对 js 很熟 的人的建议
    magicdawn
        71
    magicdawn  
       2022-04-02 12:46:40 +08:00
    TypeScript 如日中天, 不支持 ts / 支持不好, 就等着被淘汰吧~
    目前来看 nest 比较好用.

    关于 express / koa, express 多少年了还在 4.x
    koa 太薄了, 很多东西要新写, 不用 ts 的话可以试试我移植的 impress-router / impress-router-table
    https://magicdawn.github.io/common-docs/docs/impress-router
    https://github.com/magicdawn/impress-router-table
    zhennann
        72
    zhennann  
       2022-04-03 08:32:10 +08:00
    express 、koa 、nest 、egg ,都属于工具框架,都好学,但是用于业务开发都不容易,因为账户体系、权限体系、数据管理体系、审批工作流、消息推送,等等,所有与业务相关的工作都需要自己做
    强烈建议了解一下 CabloyJS 开源全栈框架,这是一款教科书级的 NodeJS 框架,内置工作流引擎,内置大量业务组件,开发 CRUD 、开发中后台,都很方便,而且还不仅仅是这些
    yafoo
        73
    yafoo  
       2022-04-23 08:25:19 +08:00 via Android
    试试我开发的 mvc 框架 jj.js ,语法跟 thinkphp 相似,你会很快上手的。
    humbass
        74
    humbass  
       2022-09-05 22:03:50 +08:00
    也是 PHP 出身,之前转 nodejs 用的是 thinkjs ,不过有段时间没有维护了
    目前在用 eggjs ,也挺顺手。
    moose123
        75
    moose123  
       2022-10-28 10:41:12 +08:00
    可以了解下 feathersJS
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2871 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 12:27 · PVG 20:27 · LAX 04:27 · JFK 07:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.