非推广,分享。
项目地址: https://github.com/divasatanica/auf
自己用原生 Node.js API 实现的,没有用到其他第三方库。
当初听早早聊的时候有分享到一道阿里的面试题:如何实现一个静态资源服务器,由此延伸而来的 Idea,于是就自己动手做了。
功能还比较简单,也暂时算不上 Framework 吧。
希望 V 站的大佬可以评价一下代码风格,指点一下看有没有啥问题,或者有什么建议可以分享一下,不喜勿喷。感谢。
1
scyuns 2021-10-14 15:10:22 +08:00 1
已经 star,但是本人不会 ts 也不会 node 只能关注了
|
2
divasatanica OP @scyuns 谢谢。
|
3
libook 2021-10-19 12:25:47 +08:00 1
Node 原生 API 写个 Server 已经十分方便了,有时候微服务架构下甚至都不大需要用框架。
但自己尝试写一个练练手也挺好的。 我自己用 JS 比较多,既然题主用 TS,看看能否尽可能消除 any ? 粗略地看了看 router-core: HTTP method 目前貌似有九种,我看题主貌似只写了 6 种,HEAD 方法用得其实也不少(我最近就在用),不知道题主具体怎么处理这个方法的呢? 像 33 行到 55 行这类的重复性代码可以考虑写个工厂,这样仅需在上面 const methods 声明一次,工厂里用 toLowerCase 转一下作为调用名,也不需要再重复写这几个 method 的名称,重构的时候也不需要改很多地方了。 既然用原生 API 来写,wrapCtxWithQueryOrBody 就不要自己 split 了,Node 有 WHATWG URL API,你可以直接 new URL(请求完整 URL),然后在 URL 对象里拿出 URLSearchParams 即可,本质上类似个 Map,可以直接调用 get 方法传 key 拿 value 。同理遇到 form 格式的 body 也可以用 URLSearchParams 处理。以及这个方法名字叫 wrapCtxWithQueryAndBody 会不会更合适呢? IncomingMessage 是个 ReadableStream,HTTP 的 payload ( body )会根据 request 的 Content-Type 不同而不同,比如 form 、text 、json 、xml 这些都是纯文本格式,还会有一些二进制格式,你可以挑几个常用的 Content-Type 来写 parser (比如写成中间件),其余的可以直接提供 Stream 或 buffer 给框架使用者,让他们自己写 parser 来解析。 HTTP 框架写的时候其实不难,难点主要在于看 HTTP 的协议规范,可以看一下 W3C 和 WHATWG 的规范文档,对照着实现。 |
4
divasatanica OP @libook
确实,如果是想做长久的框架开发,对 W3C 和 HTTP 规范的了解是一定要有的,我自己在做这个的时候,当时目标就是先实现出来,对规范这一块还没有很重视,这个可以作为后续的一个方向。 哈哈,有些函数参数类型就是所有的值皆可,像用来储存数据的结构,value 的类型就直接写成 any 了,后面看看能不能再写得严谨点。 HTTP Method 这一块,当时想的是把基础的先做出来,后续我会把更多的 Method 添加上去。 感谢你的意见。 |