美文网首页我爱编程
Node.js 装饰器、插件式 web / restful ap

Node.js 装饰器、插件式 web / restful ap

作者: Ricky泽阳 | 来源:发表于2018-08-01 20:26 被阅读272次

    先放地址:https://github.com/polixjs/polix

    polix是基于koa v2.5.0IOC、插件式开发框架,和平常的Node.js Web Framework相比,它无需另外绑定路由集合、可拓展、开发简单,依照java的著名依赖注入框架spring来制作,让开发者专注于逻辑。polix采用多服务多进程架构来保证服务的稳定和快速响应能力。polix的中间件和koa v2.x的中间件保持兼容。默认使用的ORMsequelize(后续会提供polix-orm)。开发者可以选择ES6/7/8 或者 TypeScript来进行开发。

    
    $ npm i polix --save
    
    

    Getting Started

    使用polix-cli初始化应用

    
    $ npm i polix-cli -g
    
    $ pol init example && cd example
    
    $ make build && make dev
    
    

    Service

    service文件夹下添加user.js

    
    const { Service } = require('polix');
    
    class UserService extends Service {
    
      constructor(){
    
        super();
    
        this._name = {};
    
      }
    
      async addUser(userId,name){
    
        this._name[userId] = name;
    
        return this;
    
      }
    
      async getUser(userId){
    
        return this._name[userId];
    
      }
    
    }
    
    module.exports = UserService;
    
    

    Controller

    controller文件夹下添加user.js

    
    const { Controller, GET, POST, DEL, PUT  } = require('polix');
    
    class UserController extends Controller {
    
    
    
      // POST /user/addUser
    
      @POST
    
      async addUser(param, ctx){
    
        await this.service.user.addUser(param.userId,param.name);
    
        ctx.body = {
    
          result: 'ok'
    
        };
    
      }
    
      // GET /user/getUser
    
      @GET
    
      async getUser(param, ctx){
    
        let user = await this.service.user.getUser(param.userId);
    
        ctx.body = {
    
          user
    
        };
    
      }
    
      // GET /user/info
    
      @GET('info')
    
      async getInfo(param, ctx){
    
        ctx.body = {
    
          v: 'v1.0'
    
        }
    
      }
    
      // PUT /user/updateUser
    
      @PUT
    
      async updateUser(param, ctx){
    
        ctx.body = {
    
          status: true
    
        }
    
      }
    
      // DEL /user/delUser
    
      @DEL
    
      async delUser(param, ctx){
    
        ctx.body = {
    
          status: true
    
        };
    
      }
    
      // GET /user/status/:userId
    
      @GET('status/:userId')
    
      async getStatus(param, ctx){
    
        ctx.body = {
    
          status: true,
    
          userId: param.userId
    
        };
    
      }
    
    }
    
    module.exports = UserController;
    
    

    Middware

    polix的中间件与koa 2.x 的中间件保持兼容

    框架默认加载koa-body中间件,如需另外添加中间件则新建middware文件夹(与controller文件夹平级)

    添加跨域中间件 ,新建cors.js:

    
    # cors.js
    
    const cors = require('koa2-cors');
    
    module.exports = function(){
    
      return cors({
    
        origin: function(ctx) {
    
          return '*';
    
        },
    
        exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'],
    
        maxAge: 5,
    
        credentials: true,
    
        allowMethods: ['GET', 'POST', 'DELETE'],
    
        allowHeaders: ['Content-Type', 'Authorization', 'Accept']
    
      });
    
    }
    
    

    该文件夹下必须存在index.js文件作为总输出中间件文件,加载时根据导出对象的顺序进行绑定中间件

    
    # index.js
    
    const cors = require('./cors');
    
    module.exports = {
    
        cors // 必须是函数 ,绑定方式为:app.use(cors())
    
    }
    
    

    Plugin

    
    $ npm i --save polix-request
    
    

    在项目根目录下的config文件夹下的plugin.default.js中添加以下代码

    
    // `curl`最终会挂载到`this.app`下
    
    exports.curl = {
    
      // 表示是否启用该插件
    
      enable: true,
    
      // 插件`npm`包名
    
      package: 'polix-request'
    
    };
    
    

    controller里用polix-request

    
      @GET
    
      async getWebInfo(param, ctx){
    
        let result = await this.app.curl.get('https://www.baidu.com');
    
        ctx.body = {
    
          data: result
    
        }
    
      }
    
    

    polix已经内置polix-request插件了,这里只是个演示

    Start

    
    $ make dev
    
    

    觉得好的可以给个star~

    地址:https://github.com/polixjs/polix

    相关文章

      网友评论

        本文标题:Node.js 装饰器、插件式 web / restful ap

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