Node.js 裝飾器步藕、插件式 web / restful api 框架

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

polix是基于koa v2.5.0IOC腹备、插件式開發(fā)框架,和平常的Node.js Web Framework相比感憾,它無需另外綁定路由集合谭贪、可拓展境钟、開發(fā)簡(jiǎn)單,依照java的著名依賴注入框架spring來制作俭识,讓開發(fā)者專注于邏輯慨削。polix采用多服務(wù)多進(jìn)程架構(gòu)來保證服務(wù)的穩(wěn)定和快速響應(yīng)能力。polix的中間件和koa v2.x的中間件保持兼容套媚。默認(rèn)使用的ORMsequelize(后續(xù)會(huì)提供polix-orm)缚态。開發(fā)者可以選擇ES6/7/8 或者 TypeScript來進(jìn)行開發(fā)。


$ npm i polix --save

Getting Started

使用polix-cli初始化應(yīng)用


$ 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 的中間件保持兼容

框架默認(rèn)加載koa-body中間件凑阶,如需另外添加中間件則新建middware文件夾(與controller文件夾平級(jí))

添加跨域中間件 猿规,新建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文件作為總輸出中間件文件,加載時(shí)根據(jù)導(dǎo)出對(duì)象的順序進(jìn)行綁定中間件


# index.js

const cors = require('./cors');

module.exports = {

    cors // 必須是函數(shù) ,綁定方式為:app.use(cors())

}

Plugin


$ npm i --save polix-request

在項(xiàng)目根目錄下的config文件夾下的plugin.default.js中添加以下代碼


// `curl`最終會(huì)掛載到`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已經(jīng)內(nèi)置polix-request插件了,這里只是個(gè)演示

Start


$ make dev

覺得好的可以給個(gè)star~

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末宙橱,一起剝皮案震驚了整個(gè)濱河市姨俩,隨后出現(xiàn)的幾起案子蘸拔,更是在濱河造成了極大的恐慌,老刑警劉巖环葵,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件调窍,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡张遭,警方通過查閱死者的電腦和手機(jī)邓萨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來菊卷,“玉大人缔恳,你說我怎么就攤上這事〗嗳颍” “怎么了歉甚?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)扑眉。 經(jīng)常有香客問我纸泄,道長(zhǎng),這世上最難降的妖魔是什么腰素? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任聘裁,我火速辦了婚禮,結(jié)果婚禮上弓千,老公的妹妹穿的比我還像新娘衡便。我一直安慰自己,他們只是感情好计呈,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布砰诵。 她就那樣靜靜地躺著征唬,像睡著了一般捌显。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上总寒,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天扶歪,我揣著相機(jī)與錄音,去河邊找鬼摄闸。 笑死善镰,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的年枕。 我是一名探鬼主播炫欺,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼熏兄!你這毒婦竟也來了品洛?” 一聲冷哼從身側(cè)響起树姨,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎桥状,沒想到半個(gè)月后帽揪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡辅斟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年转晰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片士飒。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡查邢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出酵幕,到底是詐尸還是另有隱情侠坎,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布裙盾,位于F島的核電站实胸,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏番官。R本人自食惡果不足惜庐完,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望徘熔。 院中可真熱鬧门躯,春花似錦、人聲如沸酷师。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽山孔。三九已至懂讯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間台颠,已是汗流浹背褐望。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留串前,地道東北人瘫里。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像荡碾,于是被迫代替她去往敵國(guó)和親谨读。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 1.簡(jiǎn)書 koa是由Express原班人馬打造坛吁,致力于成為一個(gè)更小劳殖、更富有表現(xiàn)力贼邓、更健壯的Web框架。使用koa編...
    不去解釋閱讀 2,669評(píng)論 0 11
  • 關(guān)于tabbar每次都會(huì)用得到闷尿。但是細(xì)心的朋友會(huì)發(fā)現(xiàn)塑径。其實(shí)每次自己設(shè)置的tabbar的顏色和想象中的不一樣。而且和...
    petter102閱讀 619評(píng)論 0 1
  • 成功需要我們自律和虔誠(chéng) 今天中午才看了《摔跤吧填具,爸爸》统舀,電影中的爸爸把自己女兒培養(yǎng)成了摔跤高手,并送上了世界摔跤冠...
    小魚無念閱讀 210評(píng)論 0 0
  • 昨夜星辰昨夜月劳景, 云端輕訴別離愁誉简。 一別千里赴新程, 初至他鄉(xiāng)忘離憂盟广。 我畏新酒澀且苦闷串, 卻見種種故鄉(xiāng)味。 縱有音...
    凌霜兒閱讀 170評(píng)論 0 0