介绍
零摩擦HTTP框架:
- 调整了Node.js HTTP服务器的高吞吐量。
- 高性能和可定制的请求路由器。

你自己检查一下: 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方法条目,而不是每个请求路径。
更多的
- 网站和文件: https://0http.21no.de