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

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

  •  
  •   Chism · 89 天前 · 10505 次点击
    这是一个创建于 89 天前的主题,其中的信息可能已经有所发展或是发生改变。
    之前一直做前端,没用过 nodeJS 后端框架

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

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

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

    选 node 不选 php 原因:npm 比 composer 丰富;很久没碰 php ;对 js 语言足够熟练
    第 1 条附言  ·  87 天前
    express 据说基于 es5 ,不支持 await 等新特性
    KOA 基于 es7
    这两个框架是同一个作者
    73 条回复    2022-04-23 08:25:19 +08:00
    golangLover
        1
    golangLover  
       89 天前 via Android   ❤️ 4
    nest.js
    iwdmb
        2
    iwdmb  
       89 天前
    需求不複雜的話:Express.js

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

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

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

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

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

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

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

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

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

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

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

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

    db 用什么是跟你的业务有很大关系的,如果你不知道选什么,就选 mysql 好了。
    pkoukk
        58
    pkoukk  
       88 天前
    @Chism pg 也支持 json 。
    但是一般不需要存 raw json 进去,找一些 orm 框架更合适。
    存一堆 json 进 mongo 里,最常见到的事情就是里面有一大堆奇怪的数据,一会儿这条缺字段,一会儿那条字段数据格式不对,处理数据处理到头秃
    immortalz
        59
    immortalz  
       88 天前 via Android
    eggjs ,正如 57 楼说的一样,eggjs 约定式的方式,很多东西都不用纠结中间件怎么技术选型,不同中间件之间混搭踩坑之类的
    Chism
        60
    Chism  
    OP
       88 天前
    @pkoukk
    确实有这个问题,我还遇到过 input 标签的数字直接插入导致 mongo 里本来放 number 的一部分是 string
    HanMeiM
        61
    HanMeiM  
       88 天前
    话说 egg 是阿里开源的吗?阿里的开源软件敢用吗?
    ychost
        62
    ychost  
       88 天前
    koa 用过最好用的,想怎么扩展加中间件就好了,用起来爽的一笔,node 不是 JAVA 没必要用注解,即使 node 按 java 一样规范了,后期维护还是比较困难
    cutchop
        63
    cutchop  
       88 天前
    koa 啊,js 不就是怎么爽怎么来吗,不要搞 java 那一套
    bthulu
        64
    bthulu  
       88 天前
    @lmshl nestjs 底层 HTTP 框架选啥呢, platform-express 还是 platform-fastify?
    inhal
        65
    inhal  
       87 天前 via Android
    AdonisJS ,你会找到 Laravel 的感觉
    ccraohng
        66
    ccraohng  
       87 天前
    koa express 不是 demo 产生器吗?求求不要推荐害人了
    或者你要自己根据这两个当作底层写框架?
    agileago
        67
    agileago  
       87 天前
    express,koa,eggjs 写完会让你产生在写玩具的感觉,很脆弱,现在写 Node 后端无脑 nestjs
    eephee
        68
    eephee  
       85 天前
    nest.js 有公司招人吗?前后端都会点
    chenyu0532
        69
    chenyu0532  
       85 天前
    现在正在用 egg ,我感觉很不错。
    阿里为数不多的良心产品
    chenyu0532
        70
    chenyu0532  
       85 天前
    作为一个前端仔,没有后端经验,对 js 很熟 的人的建议
    magicdawn
        71
    magicdawn  
       84 天前
    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  
       83 天前
    express 、koa 、nest 、egg ,都属于工具框架,都好学,但是用于业务开发都不容易,因为账户体系、权限体系、数据管理体系、审批工作流、消息推送,等等,所有与业务相关的工作都需要自己做
    强烈建议了解一下 CabloyJS 开源全栈框架,这是一款教科书级的 NodeJS 框架,内置工作流引擎,内置大量业务组件,开发 CRUD 、开发中后台,都很方便,而且还不仅仅是这些
    yafoo
        73
    yafoo  
       63 天前 via Android
    试试我开发的 mvc 框架 jj.js ,语法跟 thinkphp 相似,你会很快上手的。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2531 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 13:29 · PVG 21:29 · LAX 06:29 · JFK 09:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.