3202年了,你还在用express写Node服务吗?

最近我在给 AirCode 写写代码,调研了很多 Serverless/FaaS 的产品和社区,重新思考了一下 Node.js 服务端框架的发展。

众所周知,现在前端框架如雨后春笋,前有react、vue,后有 svelte、solid 等等,以及一些前端+BFF的社区也层出不穷,代表的如 react 技术栈的 Next.js,vue 技术栈的 Nuxt.js。各种 Runtime 发展也很快,除了传统的 Node,还有 Deno、Bun 以及 Edge Runtime 等。然而中间层的服务端框架似乎有些断层,很多人还在使用 Express 或者 Koa、新一点的 Fastify 也是3、4年前诞生的,用的都是相对比较传统的设计思想。

我想既然前(FE+BFF)后(Runtime)都有不少新东西,那么中间的 Framework 也可以卷一卷,所以利用研究 AirCode 的机会,我在思考能不能设计一个轻量级的 FaaS 框架,让它既能很方便地运行于本地,又能够在将来需要上线部署的时候可以无缝地一键部署到 AirCode 平台上。

于是,这个新的框架 Hydrogen 诞生了。

这个新框架我给命名为 Hydrogen,是氢元素的意思,既呼应 AirCode 的 Air,又表示这是一个极简单轻量的框架。

框架特性

它有如下的特性:

  • 🐇 内置 HMR(Hot Module Replacement)支持快速开发🔥
  • 📦 支持 CommonJS (.js .cjs)、ES 模块 (.mjs) 和 TypeScript (.ts) 函数,开箱即用。
  • 🧸 几乎不需要任何配置。
  • 🗄️ 内置了现成的文本数据库和文件 API。
  • 📁 遵循直观的目录结构约定。
  • 🤏 采用纯 JavaScript 编写,设计简洁美观。
  • ⚡️ 无论是开发环境还是生产环境,都优化了运行性能。
  • 🧊 兼容并能够在 AirCode 平台上无缝运行您的应用。

快速启用

只要你的 Node.js 版本在 14+,只需要以下两行命令就可以快速创建并启动项目:

  1. Create an aircode app
bash 复制代码
npx create-aircode-app@latest my-aircode-app && cd my-aircode-app
  1. Install dependencies and run
bash 复制代码
npm i && npm start

项目目录结构

Hydrogen 采用非常简单直观的项目目录结构

bash 复制代码
├──functions # put your function api here.
│  └── hello.js # http://localhost:3000/hello
├──public # put your static resources here.
│  └── favicon.ico # http://localhost:3000/public/favicon.ico
└── package.json

项目的云函数存放于 functions 目录下,服务启动后通过 /子目录/函数名 访问,子目录不包含 functions 目录本身。

项目的静态资源文件存放于 public 目录下,服务启动后通过 /public/子目录/文件名 访问。

创建云函数

Hydrogen 默认支持 cjs、mjs 和 ts 的云函数,你只要创建对应的 .js|.mjs|.ts 文件就可以。

云函数只需要导出一个异步函数,这个函数返回的任何数据自动被作为 response.body 返给客户端。

js 复制代码
// hello.js or hello.cjs
const aircode = require('aircode');

module.exports = async function(params, context) {
  console.log('Received params:', params);
  return {
    message: 'Hi, AirCode.'
  };
}
js 复制代码
// hello.mjs
import aircode from 'aircode';

export default async function (params, context) {
  console.log('Received params:', params);
  return {
    message: 'Hi, AirCode.',
  };
};
js 复制代码
// hello.ts
import aircode from 'aircode';

export default async function (params: any, context: any) {
  console.log('Received params:', params);
  return {
    message: 'Hi, AirCode.',
  };
};

以上三个函数任何一个放在 functions 目录下,服务启动后,都可以通过路径 /hello 访问。

详细文档

Hydrogen 的云函数 paramscontext 提供了请求参数访问和各种操作方法,aircode.dbaircode.files 提供了内置数据库和文件API。

详细资料见下方的文档:

部署和集成

Hydrogen 项目完全兼容 AirCode 的规范,能够通过 GitHub 一键部署到 AirCode 中发布到线上运行。

这部分,后续有机会再单独详细介绍。


大家还等什么,有兴趣的同学可以访问代码仓库安装并使用 Hydrogen。

如有任何问题,欢迎留言讨论👏

相关推荐
hoLzwEge2 小时前
解码 IDE 智能提示:jsconfig.json 辅助开发全攻略
前端·前端框架
gis开发之家5 小时前
《Vue3 从入门到大神35篇》Vue3 源码详解(五):effect 依赖收集原理——track 与 trigger 是如何工作的?
javascript·typescript·前端框架·vue3·vue3源码
橘子星6 小时前
我一个前端切图仔,凭什么能在浏览器里跑大模型?
前端·javascript·前端框架
前端双越老师7 小时前
如何以前端视角(非0基础)学 Java ?
java·node.js·全栈
腻害兔9 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:ERP 企业资源模块,一个轻量级进销存的完整实现?
前端·javascript·vue.js·人工智能·前端框架·产品经理·ai编程
Kel11 小时前
Node.js 没那么复杂
人工智能·node.js·全栈
星栈独行11 小时前
Node 接口该写同步还是异步?
服务器·开发语言·后端·程序人生·node.js
小林ixn1 天前
从 onclick 到 React 合成事件,再到完整应用逻辑:一次前端架构的深度剖析
前端·react.js·前端框架
星栈1 天前
Node 接口该写同步还是异步?
后端·node.js