美文网首页
使用装饰器和javascript构建web服务

使用装饰器和javascript构建web服务

作者: aimleo | 来源:发表于2021-04-13 10:26 被阅读0次

    在这里分享一个开源的http框架,它使用javascript语言,支持使用装饰器来创建web服务。
    github地址
    npm地址

    totea

    totea是一个基于express的nodejs框架,使用装饰器来定义路由和中间件。特点概述:

    • javascript : 现有的使用装饰器的框架都默认使用typescript,totea可以在javascript中使用,只需要引入plugin-proposal-decorators
    • 简单高效 : totea提供了不到20个装饰器函数,却可以支持多种复杂使用场景;
    • 易于整合 : totea使用express作为web服务器,我们没有修改任何底层的逻辑,这意味着在express中能使用的方法和插件,也可以在totea中使用。

    示例

    让我们来创建一个简单的用户服务, 包含user的增删改查,再创建一个二级路由,用于获取user的tag列表。

    const { Server, Get, Post, Delete, Put, Middleware, Controller,Params } = require('@totea/core')
    
    // 添加一个二级路由, 名称为tag
    @Controller('tag')
    class tagController {
      @Get('/list')  // GET /tag/list
      getTag() {}
    }
    
    @Server({
        port: 4000, // 把端口设置为4000
        controller: [tagController]  // 把上面创建的控制器注入到服务
    })
    @Middleware((req, res, next) => {   // 添加一个全局中间件
        next()
    })
    class Service {
      @Get('/user')  // GET /user
      getUser() {}
    
      @Get('/user/:id') // GET /user/${id}
      @Middleware((req, res, next) => {  // 为/user/${id}添加一个私有中间件
        next()
      })
      getUserById({ params }) {}
    
      @Post('/user')  // POST /user
      insertUser({ body }) {}
    
      @Delete('/user/:id')  // DELETE /user/${id}
      // 添加一个参数过滤器,req.params.id必须提供且长度为10
      @Params(params => params.id && params.id.length === 10)
      deleteUserById({ params }) {}
    
      @Put('/user/:id') // PUT /user/${id}
      modifyUserById({ params, body }) {}
     }
    
    const service = new Service()
    service.start()
    
    

    这就是全部的代码了,是不是很简单?

    详细的使用方法,请查看说明文档

    安装使用

    # 安装 totea
    npm i @totea/core
    
    # 安装并配置babel
    npm i @babel/core @babel/node @babel/plugin-proposal-decorators
    
    # 如果你的项目已经有babel配置, 把@babel/plugin-proposal-decorators加到你的配置文件中
    # 没有的化创建一个babel.config.js文件,写入以下内容
    module.exports = {
      plugins: [
        ["@babel/plugin-proposal-decorators", {legacy: true }]
      ],
    };
    
    # 使用babel-node运行你的项目
    npx babel-node index.js
    

    License

    MIT

    Copyright (c) 2021-present aim-leo

    相关文章

      网友评论

          本文标题:使用装饰器和javascript构建web服务

          本文链接:https://www.haomeiwen.com/subject/lvuqlltx.html