polix
是基於koa v2.5.0
的IOC
、外掛式開發框架,和平常的Node.js Web Framework
相比,它無需另外繫結路由集合、可擴充、開發簡單,依照java
的著名依賴注入框架spring
來製作,讓開發者專注於邏輯。polix
採用多服務多程式架構來保證服務的穩定和快速響應能力。polix
的中介軟體和koa v2.x
的中介軟體保持相容。預設使用的ORM
是sequelize
(後續會提供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
地址:polix.js