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

请教 Node.js 后端框架的选择
之前一直做前端,没用过 nodeJS 后端框架

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

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

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

选 node 不选 php 原因:npm 比 composer 丰富;很久没碰 php ;对 js 语言足够熟练

76 回复

需求不複雜的話:Express.js

https://github.com/expressjs/express


周下载量 24,602,530 ,这个绝对可以

express 和 koa 是偏底层的,nestjs 和 egg 是高一层的,刚刚恰好在看 nestjs ,很完善很强大,不过可能不适合你入门


Express 配合 mongodb 好还是 mysql ?

Express 用户量最大,本身包含一些组件(中间件)可以较快速搭建出一个 web 服务出来。
koa 也是比较主流的框架,采取微内核的设计,主体只包含 web 服务核心部分,需要其他功能可以自己找相应的组件(中间件)进行搭配。

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

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

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

后台管理网页可以像 PHP 那样使用模板机制渲染,如 EJS 模板引擎,或者 PUG 模板引擎;也可以考虑做成前后端分离的方案,比如另起一个前端项目用 React 或 Vue 写。

express 挺舒服的。B 端管理随便用 react 或者 vue 撸一个然后 express 的 statics 暴露下打包好的目录就好了

nestjs, nextjs, nuxtjs, 看你会哪个前端框架

熟悉 typescript:midwayjs, nestjs 。
不熟悉:eggjs 。

首先排除 nestjs ,thinkjs 可以考虑

eggjs, 用不用 ts 都支持

#10 thinkjs 一年多了作者自己都不咋维护了

项目不复杂的话我会选择 Koa ,访问数据库用 TypeORM ,如果需要后端渲染的话用 ejs 模板引擎
前面有人提到 Express.js ,但是这个库在配合 async function 时有坑(不是不兼容 async function ,而是会遇到一些问题,要额外写代码解决)

laravel 不考虑下吗。

放弃 php 了

快速出活而且维护频率低的用 https://github.com/directus/directus ,设计好表结构一天出成果
不断迭代的用 nest.js


>> Express 配合 mongodb 好还是 mysql ?
這是一個可大可小的問題,如果你不確定怎麼選的話:MySQL
有個久經考驗的 Transaction 必要的時候可以幫助你

可以试试 Serverless ,出活比 mvc 框架快多了 推荐 faas.js

fastify ,adonisjs

小项目 express ,koa
大项目 nest egg

next + prisma

上 Serverless 吧,省钱还省工作量,反正都是新学一个框架

nest.js 可能是最成熟的 node 后端框架了吧

koa + typeorm

推荐 nestjs

学了 nestjs 差不多就顺手大概会了 angular 何乐不为呢

作为一个 php 跟 nodejs 都熟悉的人,个人猜测你问出这个问题,应该不是高手,所以我推荐你使用易上手的 eggjs 框架。不使用 Express 和 koa 是因为这两个框架太基础,很多东西要你手动再写。不使用 midwayjs, nestjs 是因为它们的概念理解对新手会造成更多心智负担(指的是相比 eggjs ),且中文文档不够丰富。

strapi 考虑下? 上个 pg 做数据库挺好用的

koa 和 express 都可以,但是 db 千万不要用 mongo ,辣鸡

nestjs , 原生支持 ts 很重要


考虑 mongo 因为数据结构跟 json 兼容,方便处理

nestjs 。
还要再快的话,试试 strapi ,外包利器。

koa.js 和 express.js 最大区别在于处理网络请求处理模型,前者为洋葱模型,后者为管道。
nest.js 这类有控制器、中间件、过滤器等概念,更符合 Java 、C# 开发逻辑。
要说新手容易上手,还得是 express.js ,概念较少,官方轮子够多

nestjs 感觉不错

作为一个老 Node.TS 开发者,给你些框架选型建议
NestJS:不建议裸用 koa/express ,他们是底层框架,在其上实现拦截器 /身份认证 /三方登录等需要花费的时间要多很多。
Prisma2: 作为 TypeORM 早期贡献者,我不推荐你在 2022 年的今天还使用 TypeORM ,Prisma2 的工具链和开发体验都非常流畅。

你还可以考虑下 postgresql ,既可以用 JSONB 存储,又不丢失 ACID 的所有好处

再给你一个我自己的热身项目,就是用我上面说的技术栈,并且还支持 Serverless 部署。

nestjs ,要 crud 搭配 nestjs-query ( graphql )或 /crud ( restful )

轻量底层框架:fastify 、express
上层框架:NestJS

其它观点同#39 楼

我也新手
推荐 Fastify + Cloud Run
Express 就算了吧

koa + mogoose

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

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

Nest.js

Express 和 Koa2 就算了,过时了,过于底层,好比你用 jq 写网站一样过于简陋。社区也不活跃。

还是 Express 吧,说实话这个写起来还是很舒服的,我把公司 微服务都换成 Express 了。 还是 Express 好用,Nest.js 上层的东西太多了。 问题很大,如果搞不明白 Nest.js 里面的 运行原理 感觉就跟 Spring Boot 莫名其妙的的升个级就挂了。。。 用 Express 的话 逻辑大多都是自己的,然后项目结构合理,很方便的。

非常赞同

不妨试试 remix.js ,虽然比较新但是确实很棒

REMIX.RUN 吗 他算是个全栈框架 输出 API 不太适合,按照楼主的需求 简单点的 NEXT.JS+PRISMA 就能胜任

建议你放弃使用 nodejs 做后端

用 express ,其实不如用 koa 更现代一点点。不过要大而全集成可以试试 nest.js 。用 node.js 后端开发 5 年了,很爽

原是 Javaer ,不喜欢在 node 系也使用 Spring 注解那一套东西,目前在用 koa2 + mongoose + ts ,挺喜欢的。

我同意 #29 的观点。

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

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

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

db 用什么是跟你的业务有很大关系的,如果你不知道选什么,就选 mysql 好了。

pg 也支持 json 。
但是一般不需要存 raw json 进去,找一些 orm 框架更合适。
存一堆 json 进 mongo 里,最常见到的事情就是里面有一大堆奇怪的数据,一会儿这条缺字段,一会儿那条字段数据格式不对,处理数据处理到头秃

eggjs ,正如 57 楼说的一样,eggjs 约定式的方式,很多东西都不用纠结中间件怎么技术选型,不同中间件之间混搭踩坑之类的


确实有这个问题,我还遇到过 input 标签的数字直接插入导致 mongo 里本来放 number 的一部分是 string

话说 egg 是阿里开源的吗?阿里的开源软件敢用吗?

koa 用过最好用的,想怎么扩展加中间件就好了,用起来爽的一笔,node 不是 JAVA 没必要用注解,即使 node 按 java 一样规范了,后期维护还是比较困难

koa 啊,js 不就是怎么爽怎么来吗,不要搞 java 那一套

nestjs 底层 HTTP 框架选啥呢, platform-express 还是 platform-fastify?

AdonisJS ,你会找到 Laravel 的感觉

koa express 不是 demo 产生器吗?求求不要推荐害人了
或者你要自己根据这两个当作底层写框架?

express,koa,eggjs 写完会让你产生在写玩具的感觉,很脆弱,现在写 Node 后端无脑 nestjs

nest.js 有公司招人吗?前后端都会点

现在正在用 egg ,我感觉很不错。
阿里为数不多的良心产品

作为一个前端仔,没有后端经验,对 js 很熟 的人的建议

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

express 、koa 、nest 、egg ,都属于工具框架,都好学,但是用于业务开发都不容易,因为账户体系、权限体系、数据管理体系、审批工作流、消息推送,等等,所有与业务相关的工作都需要自己做
强烈建议了解一下 CabloyJS 开源全栈框架,这是一款教科书级的 NodeJS 框架,内置工作流引擎,内置大量业务组件,开发 CRUD 、开发中后台,都很方便,而且还不仅仅是这些

试试我开发的 mvc 框架 jj.js ,语法跟 thinkphp 相似,你会很快上手的。

也是 PHP 出身,之前转 nodejs 用的是 thinkjs ,不过有段时间没有维护了
目前在用 eggjs ,也挺顺手。

可以了解下 feathersJS

在选择Node.js后端框架时,需要考虑项目的具体需求、团队的技术栈以及框架的特性和优势。以下是对几个主流Node.js后端框架的简要介绍及代码示例:

  1. Express

    • 特性:简洁灵活,有丰富的中间件生态系统。
    • 示例代码:
      const express = require('express');
      const app = express();
      app.get('/', (req, res) => res.send('Hello World!'));
      app.listen(3000, () => console.log('Server started on port 3000'));
      
  2. Koa

    • 特性:采用现代异步流处理方式,代码简洁易读。
    • 示例代码:
      const Koa = require('koa');
      const app = new Koa();
      app.use(async ctx => {
        ctx.body = 'Hello World';
      });
      app.listen(3000, () => console.log('Server started on port 3000'));
      
  3. NestJS

    • 特性:基于TypeScript,模块化,适合构建大型企业级应用。
    • 示例(需TypeScript环境):
      import { NestFactory } from '@nestjs/core';
      import { AppModule } from './app.module';
      
      async function bootstrap() {
        const app = await NestFactory.create(AppModule);
        await app.listen(3000);
      }
      bootstrap();
      

每个框架都有其独特的优势和适用场景,建议根据项目需求选择最合适的框架。

回到顶部