Skip to content

rickyes/polix

Repository files navigation

Polix

Node.js Web Framework

Build Status npm license

polix是基于koa v2.5.0IOC框架,和平常的Node.js Web Framework相比,它无需另外绑定路由集合,开发简单,依照java的著名依赖注入框架spring来制作,让开发者专注于逻辑。polix采用多服务多进程架构来保证服务的稳定和快速响应能力,每个controller都是一个独立的服务,各服务之间采用RPC来通信,这一点借鉴了pomelo的架构,不同的是,polix采用的是googlegRPC实现服务通信。polix的中间件和koa v2.x的中间件保持兼容。polix提供Dockerfile+docker-compose.yml方案进行部署,默认使用的ORMsequelize(后续会提供polix-orm)。开发者可以选择ES6/7/8 或者 TypeScript来进行开发。

以上部分功能尚在开发阶段,敬请关注!

Install

NPM

$ npm i polix --save

Getting Started

$ 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/add�User
  @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())
}

Start

$ make build && make dev

Author

Polix © Ricky 泽阳, Released under the MIT License.