首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Node.js
Express
PPA for Ubuntu
ppa:chris-lea/node.js
V2EX  ›  Node.js

TKoa - 使用 TypeScript 重构的 Node.js Koa 开发框架

  •  
  •   18510047382 · 208 天前 · 3284 次点击
    这是一个创建于 208 天前的主题,其中的信息可能已经有所发展或是发生改变。

    tkoa logo

    🌈Tkoa 是使用 typescript 编写的 koa 框架!

    尽管它是基于 typescript 编写,但是你依然还是可以使用一些 node.js 框架和基于 koa 的中间件。

    不仅如此,你还可以享受 typescript 的类型检查系统和方便地使用 typescript 进行测试!

    安装

    TKoa 需要 >= typescript v3.1.0 和 node v7.6.0 版本。

    $ npm install tkoa

    Hello T-koa

    import tKoa = require('tkoa');
    
    interface ctx {
        res: {
            end: Function
        }
    }
    
    const app = new tKoa();
    
    // response
    app.use((ctx: ctx) => {
        ctx.res.end('Hello T-koa!');
    });
    
    app.listen(3000);
    

    Middleware

    Tkoa 是一个中间件框架,拥有两种中间件:

    • 异步中间件
    • 普通中间件

    下面是一个日志记录中间件示例,其中使用了不同的中间件类型:

    async functions (node v7.6+):

    interface ctx {
        method: string,
        url: string
    }
    
    app.use(async (ctx: ctx, next: Function) => {
        const start = Date.now();
        await next();
        const ms = Date.now() - start;
        console.log(`${ctx.method} ${ctx.url} - ${ms}ms`);
    });
    

    Common function

    // Middleware normally takes two parameters (ctx, next), ctx is the context for one request,
    // next is a function that is invoked to execute the downstream middleware. It returns a Promise with a then function for running code after completion.
    
    interface ctx {
        method: string,
        url: string
    }
    
    app.use((ctx: ctx, next: Function) => {
        const start = Date.now();
        return next().then(() => {
            const ms = Date.now() - start;
            console.log(`${ctx.method} ${ctx.url} - ${ms}ms`);
        });
    });
    

    Getting started

    Support

    TypeScript

    • 大于等于 v3.1 版本

    Node.js

    • 大于等于 v7.6.0 版本

    License

    MIT

    16 回复  |  直到 2019-05-22 14:47:44 +08:00
        1
    siloong   208 天前
    支持。btw,为什么不叫 Toa。。。
        2
    solome   208 天前
    不理解这样做的意义(分割),不是已经存在`@types/koa`了么。
        3
    askfermi   208 天前
    同楼上问
        4
    maichael   208 天前
    同问,跟原有的 Koa + types 有什么区别。
        5
    18510047382   208 天前
    @solome @types/koa 只是 koa 添加到 TypeScript 的一个语法包而已,只是提供给 TypeScript 一些语法的信息,但是 koa 这个框架并没有 TypeScript 版本的,这两者是不一样的
        6
    18510047382   208 天前
    @askfermi 已经给楼上回答了。
    @maichael 已经给楼上回答了。
        7
    Axurez   208 天前
    为啥还在用 `import tKoa = require('tkoa');` 这种写法
        8
    18510047382   208 天前
    @Axurez 文档说明里已经写明了,这样用 commonjs 模块规范是为了更好地兼容 koa 中间件和 node.js 框架。
        9
    meteor957   208 天前 via Android
    赞。不过现在有 nestjs 了,用 ts 封装了 express.不知道 i 和楼主这个区别大不大
        10
    18510047382   207 天前
    @meteor957 其实就是 koa 和 Express 的差别
        11
    Gea   207 天前
    typescript 版本的 koa 有什么优势吗,nest 我记得好像还有些注解的语法糖,用起来和 ng、sprintboot 很像
        12
    18510047382   207 天前
    @Gea 拥有 TypeScript 完整的类型检查系统,可以很方便的调试
        13
    18510047382   207 天前
    @siloong 都一样咯
        14
    blanu   187 天前
    内部用 TS 实现和外部暴露 API 用 TS 写 Definition 差不多吧……
        15
    blanu   187 天前
    今天又看了下,类型推断竟然是要你自己写 interface,要你这个有何用?
    还有什么用 legacy 的 import 语法说是为了兼容 commonjs,我佛了,tsconfig 里面不会自己设置?
    这就是个骗🌟项目
        16
    cl903254852   173 天前
    不是有 @types/koa 吗?
    而且 import tKoa = require('tkoa'); 是什么写法。。。 没明白
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   926 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 25ms · UTC 20:29 · PVG 04:29 · LAX 12:29 · JFK 15:29
    ♥ Do have faith in what you're doing.