0http

中文文档
5.2.0发布于 2026/10/09MITTypeScriptCommonJS

零摩擦HTTP请求路由器。对速度的需求!

中文使用文档
文档目录3 节
  1. 安装
  2. 使用
  3. Trie路由器(无依赖,最快)

介绍

NPM version NPM Total Downloads License TypeScript support Github stars

零摩擦HTTP框架:

  • 调整了Node.js HTTP服务器的高吞吐量。
  • 高性能和可定制的请求路由器。

Performance Benchmarks

你自己检查一下: https://web-frameworks-benchmark.netlify.app/result?f=feathersjs, 0 http,洋桧木fastify nestjs-express,表达,帆,nestjs-fastify restana

安装

从npm安装包:

npm install 0http

使用

const cero = require('0http')
const { router, server } = cero()

router.get('/hello', (req, res) => {
  res.end('Hello World!')
})

router.post('/do', (req, res) => {
  // ...
  res.statusCode = 201
  res.end()
})

//...

server.listen(3000)

Trie路由器(无依赖,最快)

具有相同API的分段路由器,中间件链接,嵌套路由器 并将错误包含作为默认的顺序路由器,但每个路由没有正则表达式, 没有路由缓存大小,没有外部依赖。静态路由解析为 随着路由数的增加,恒定时间和动态路由保持不变。

const trie = require('0http/lib/router/trie')
const { router, server } = cero({ router: trie() })

router.use((req, res, next) => next())
router.get('/users/:id', (req, res) => res.end(req.params.id))
router.get('/files/*', (req, res) => res.end(req.params['*']))

选项: caseSensitive (默认 true), ignoreTrailingSlash (默认 true),加上 defaultRoute, errorHandler 和 id. 模式: /static, /:param, /:param?, /:name.ext (或 /:name.ext?), /* 和 RegExp (命名组成为参数)。静态段是文字的,所以 /a+b 只匹配 /a+b.

区别于顺序路由器,故意:

  • 默认区分大小写; caseSensitive: false 只折叠ASCII字母。
  • 一、 * 这不是最后一段,或者a ? 这不是最后一个字 参数段的,在注册时抛出,而不是匹配太多。
  • 不存在的可选参数就是不存在 req.params ( 顺序路由器将其设置为 undefined,这也打击了一个继承的 同名参数)。
  • 一个拖 /* 还匹配裸前缀,用 '*' 等于 ''.
  • 空路由段将被忽略(/a//b 是 /a/b); 顺序路由器 截断路由的第一个空段。
  • 与 ignoreTrailingSlash: false,即注册为 /dir/ 匹配 /dir/ 只和 /dir 匹配 /dir 只有。
  • 不以。开头的请求路径 / 没有匹配。
  • router.routes 只列出RegExp路由;没有 cacheSize 选择。

支持/捐助💚

您可以支持这个项目的维护:

安全笔记

  • 错误永远不会使这个过程崩溃。 抛出(或拒绝)的路由处理程序 响应头已经发送后包含:响应结束或 套接字关闭,服务器继续服务。一个自定义 errorHandler 那 本身抛出或拒绝也包含有一个裸露 500。如果响应是 习俗已经结束了吗 errorHandler 被跳过(写到结束? 响应将引发不可捕获流错误)。投掷或拒绝 defaultRoute 以同样的方式包含。
  • 挂载前缀仅从路径中剥离。 查询字符串never 成为嵌套路由器路径的一部分,所以 GET /api/acme?x=/admin 到达 路由器安装在 /api/:tenant 作为 /?x=/admin, never as /admin.
  • 顺序路由匹配不区分大小写。 /Admin, /admin 和 /ADMIN 都匹配注册为 /admin。反向代理,waf和 对路径区分大小写的认证层必须相应地对齐。 缺省情况下,trie路由器区分大小写并处理静态段 字面上(没有正则表达式的含义),因此它与开箱即用的这些层一致。
  • 安装嵌套路由器 use(). 只有 router.use(prefix, subRouter) 当进入一个嵌套的路由器时重写URL。路由器被传递给 get() 或者 on() 被视为普通中间件,不会与其子路由匹配。
  • 嵌套路由器拥有不匹配的请求。 如果挂载的路由器没有找到路由 对于重写的URL,它会响应 404 本身和母链是不一样的 恢复(不像Express安装的应用程序会失败)。
  • 路由缓存受内存限制。 与参数匹配, 404年代, 长度超过4KB的路径永远不会被缓存,并且缓存会被额外封顶 通过总大小-所以攻击者控制的唯一路径不能固定内存。这个 Trie路由器根本没有请求键缓存:它的静态表有一个 每个注册路由和已知HTTP方法条目,而不是每个请求路径。

更多的

版本与发布记录

0http 共发布 46 个版本,首次发布于 2019/03/17;过去 12 个月发布了 6 个版本。

版本发布日期距今
5.2.0latest2026/10/0925 天前
5.1.12026/09/061 个月前
5.1.02026/06/214 个月前
5.0.12026/05/315 个月前
5.0.02026/05/155 个月前
4.4.02025/11/1911 个月前

关于 0http 的常见问题

0http 是什么?

零摩擦HTTP请求路由器。对速度的需求!

如何安装 0http?

在项目目录运行 npm install 0http,或使用 pnpm add / yarn add / bun add。

0http 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

0http 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

0http 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22.x。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

0http 可以商用吗?

0http 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

0http 还在维护吗?

最新版本 5.2.0 发布于 2026/10/09(25 天前);至今共发布 46 个版本,其中过去 12 个月发布了 6 个;首次发布于 2019/03/17。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。