deno的koa框架oak
发布于 6 年前 作者 fuxingZhang 6912 次浏览 来自 分享

https://github.com/kitsonk/oak

node ==> deno || || koa ==> oak

名字只是调换了字母的顺序

代码更加精简,惊叹deno的更新速度,越来越完善

核心代码只有 application.ts,compose原来是外部引用的,现在直接写在里面。

/* application.ts */
import { Context } from "./context";
import { serve } from "./deps";

export interface Middleware {
  (context: Context, next: () => Promise<void>): Promise<void> | void;
}

function compose(
  middleware: Middleware[]
): (context: Context) => Promise<void> {
  return function(context: Context, next?: () => Promise<void>) {
    let index = -1;
    async function dispatch(i: number) {
      if (i <= index) {
        throw new Error("next() called multiple times.");
      }
      index = i;
      let fn: Middleware | undefined = middleware[i];
      if (i === middleware.length) {
        fn = next;
      }
      if (!fn) {
        return;
      }
      return fn(context, dispatch.bind(null, i + 1));
    }
    return dispatch(0);
  };
}

export class Application {
  private _middleware: Middleware[] = [];

  async listen(addr: string): Promise<void> {
    const middleware = compose(this._middleware);
    const server = serve(addr);
    for await (const request of server) {
      const context = new Context(request);
      await middleware(context);
      await request.respond(context.response.toServerResponse());
    }
  }

  use(middleware: Middleware): this {
    this._middleware.push(middleware);
    return this;
  }
}
28 回复

我一直没搞太明白,deno未来要做什么?node又要怎么办?

@chunjiu

deno未来要做什么?

node做什么,deno就做什么 deno带来了更先进的理念

node又要怎么办?

其实这个问题说简单又简单,说复杂又复杂

可以并存啊,并不是说一个新东西出现了,就非得你死我活 每个都会拥有自己的使用群体,编程语言有很多,虽然使用群体有大有小,但是依然有人用啊 image.png

做web服务器 之前 ==》 有人用java,有人用go,有人用python,有人用node.js ( JS ) 。。。。。。 现在 ==》 你多了一个选择,deno ( TS )

对,就是多了一个选择而已

deno 丢掉了历史包袱,但是也失去了一个成熟的庞大的生态

typescript 就不需要按照 js 老的思想来了。 适合 nest.js 这样的框架

@justjavac 嗯嗯 👍

个人认为生态没有完全丢掉,当你需要的在deno的找不到时,找node的,稍微改改就能用了,毕竟TS 是 JS的超集

@zuohuadong 哪都有你 自豪地采用 CNodeJS ionic

这名字有点皮…

@justjavac node很多包改一改,deno应该也能用

哇 猴腮雷 自豪地采用 CNodeJS ionic

顶层的 async / await 还没有支持吗?

还行吧,现在没那么反感了。准备不忙的时候去看看。 毕竟融合了TS。

@cctv1005s 没有。这个直接等 typescript

@1316346949 『改一改』日常自己玩玩还可以,生产环境,这些包的后续维护并不是小工作,虽然说可以借用,但毕竟还是脱离了原来的生态。

@atian25 egg 什么时候支持 deno 啊 :p

@justjavac 支持deno 得重构了吧,还得用ts 写

@justjavac 等啥时候出一个 P9 把 deno 在阿里的某几条业务线都作为标配语言先,然后把内部近百个 SDK 都封装下。

企业级开发背后的因素多着呢,生态,工程化等等,不是一两个肉眼可见的小语法糖就两眼发光了。

@atian25 不是一两个肉眼可见的小语法糖就两眼发光了 赞,哈哈,天哥人狠话不多.

@atian25 egg 不是用 ts 重构了吗

@justjavac 没啊,只是在 d.ts 上做了手脚而已。

@atian25 说好的茶叶蛋呢

@justjavac 凤蝶团队内部在用了,那也不是用 TS 重构 egg 啊,只是封装一个上层框架,这个框架本身扩展继承 egg,它是用 TS 写的,但 egg 不需要。

d.ts 的那个也不仅仅是为了 TS 搞的,纯 js 的 egg 项目也支持生成 d.ts 来提供智能提示了:https://github.com/whxaxes/blog/issues/16

好像离题了,不在这讨论了。

@atian25 我一直使用的 jsdoc,然后使用 tsc 进行类型检查

学习观摩中

觉得 Typescript 越来约流行的 点 右上角 👍

回到顶部