極簡風(fēng)格Node無后端框架實(shí)現(xiàn)——xmodel

框架理念

最少的代碼旗笔,完成最通用的功能粪狼,是最美的設(shè)計(jì)

無后端框架——XModel

有沒有比SpringBoot更簡單电抚,更輕量,幾乎不用寫代碼就能完成后端CRUD功能的框架呢

答案是:有...蔗衡,傳送門在下面

XModel——無后端框架只需要寫實(shí)體類纤虽,然后直接RESTful請(qǐng)求,全自動(dòng)CRUD

這是一個(gè)用Node構(gòu)建的“無后端”框架绞惦,“無后端”架構(gòu)和框架應(yīng)該在目前來說還是比較激進(jìn)和前沿的廓推,這個(gè)項(xiàng)目是我個(gè)人的一個(gè)學(xué)習(xí)和試水吧,未來還會(huì)繼續(xù)拓展和實(shí)現(xiàn)翩隧。

Node的優(yōu)美和強(qiáng)大樊展,讓我愛不釋手呻纹,我第一次覺得在微服務(wù)框架領(lǐng)域,有了和SpringBoot一戰(zhàn)的對(duì)手专缠。廢話少說了雷酪,先直接來看使用,然后詳細(xì)說實(shí)現(xiàn)思路——

使用方法

安裝說明


1,config/default.js中設(shè)置數(shù)據(jù)庫連接

2,node app.js(啟動(dòng))

3,啟動(dòng)app.js后涝婉,系統(tǒng)會(huì)自動(dòng)加載model/下所有的JS文件哥力,并且與數(shù)據(jù)庫同步,創(chuàng)建數(shù)據(jù)庫表或更新字段

使用說明(model任意墩弯,例如:user_info吩跋,數(shù)據(jù)庫表無須關(guān)心笆焰,配置數(shù)據(jù)庫連接之后咒精,數(shù)據(jù)實(shí)體會(huì)自動(dòng)與數(shù)據(jù)庫同步,目前唯一需要做的事情就是寫實(shí)體類)

RESTful接口

[POST]http://host:port/xmodel/MODEL/create

[POST]http://host:port/xmodel/MODEL/update

[POST]http://host:port/xmodel/MODEL/query

[GET]http://host:port/xmodel/MODEL/get/:id

[GET]http://host:port/xmodel/MODEL/destroy/:id

以一個(gè)用戶模塊為例扑浸,需要對(duì)用戶進(jìn)行增刪改查:

需要注意的是默認(rèn)自動(dòng)創(chuàng)建id,createdAt,updatedAt三個(gè)字段引矩,無須人工處理

在數(shù)據(jù)庫插入一條數(shù)據(jù)梁丘,只需要請(qǐng)求如下url

[POST]http://host:port/xmodel/user_model/create

post body:{"username":"cheney","password":"123"}


在數(shù)據(jù)庫修改一條數(shù)據(jù),只需要請(qǐng)求如下url

[POST]http://host:port/xmodel/user_model/update

post body:{id:1,"username":"cheney","password":"123456"}


在數(shù)據(jù)庫查詢多條數(shù)據(jù)旺韭,只需要請(qǐng)求如下url

[POST]http://host:port/xmodel/user_model/query

post body:{"username":"cheney"}


在數(shù)據(jù)庫查詢一條數(shù)據(jù)氛谜,只需要請(qǐng)求如下url

[GET]http://host:port/xmodel/user_model/get/1

[GET]http://host:port/xmodel/user_model/destroy/1

框架目錄結(jié)構(gòu)


controller——請(qǐng)求控制器,全自動(dòng)区端,無須人工處理

router——路由器控制器值漫,全自動(dòng),無須人工干預(yù)

sequelize——ORM數(shù)據(jù)庫映射器织盼,全自動(dòng)惭嚣,無須人工干預(yù)

config——系統(tǒng)環(huán)境配置文件,不同開發(fā)/生成環(huán)境悔政,使用不同配置

model——【數(shù)據(jù)模型實(shí)體晚吞,這是使用框架唯一需要編寫的文件,每增加數(shù)據(jù)實(shí)體谋国,增加一個(gè)文件】

app.js——系統(tǒng)入口

實(shí)現(xiàn)思路


1槽地、使用Node的Express微服務(wù)框架作為基礎(chǔ)

2、使用Express的中間件Router處理所有請(qǐng)求

3芦瘾、因?yàn)镽ESTful風(fēng)格接口規(guī)范捌蚊,所以Controller控制器可以根據(jù)路徑解析,動(dòng)態(tài)調(diào)用需要處理的實(shí)體類

4近弟、使用Sequelize(一個(gè)極其優(yōu)雅的NodeORM框架)完美完成請(qǐng)求JSON對(duì)象與實(shí)體類缅糟,再到數(shù)據(jù)庫表的映射

5、另外框架附加了config環(huán)境配置祷愉,可以根據(jù)開發(fā)或生產(chǎn)切換環(huán)境配置窗宦;tracer日志系統(tǒng)赦颇,可以很優(yōu)雅簡潔呈現(xiàn)不同級(jí)別log

未來還會(huì)考慮更靈活拓展,更強(qiáng)大業(yè)務(wù)功能赴涵,當(dāng)然媒怯,這些都必須在不寫代碼的前提設(shè)計(jì)理念:)下完成......

設(shè)計(jì)背景

目前RESTful風(fēng)格,MVVM前后端分離的Web應(yīng)用架構(gòu)設(shè)計(jì)已經(jīng)逐漸成為主流髓窜,雖然SSH等之類的傳統(tǒng)MVC模式后端框架及其架構(gòu)還會(huì)并行存在一段時(shí)間扇苞,但是唯物主義的理念,新事物總會(huì)取代舊事物寄纵。

我自己個(gè)人從最早先的Java Servlet開發(fā)鳖敷,到SSH,SSM程拭,SpringMVC定踱,SpringBoot等Java框架的演進(jìn),而因?yàn)閭€(gè)人對(duì)于技術(shù)的熱愛和追求哺壶,這些年也更多地嘗試過PHP和Python進(jìn)行架構(gòu)開發(fā)屋吨。在個(gè)人對(duì)于整個(gè)Web架構(gòu)設(shè)計(jì)的思考和理解中蜒谤,雖然后端百花齊放山宾,但Java似乎永遠(yuǎn)都是一枝獨(dú)秀,以其頑強(qiáng)的生命力獨(dú)占半壁江山鳍徽。

的確资锰,Java很優(yōu)秀,越是深入地接觸Java會(huì)越覺得Java的設(shè)計(jì)思想不簡單阶祭,JavaWeb的衍生框架和工具實(shí)在太多了绷杜,太完善了。SpringMVC盛行的時(shí)候濒募,我就被它的思想和理念吸引鞭盟,以至于我自己在學(xué)習(xí)PHP的時(shí)候,用了SpringMVC的概念瑰剃,花了一年多接近兩年的業(yè)余時(shí)間完成了一個(gè)極度類似SpringMVC的PHP框架齿诉,我自己給它起名叫做PHPBean,這是個(gè)人制作的第一個(gè)Web框架晌姚,傳送門在下面:

PHPBean——一個(gè)SpringMVC風(fēng)格的PHPWeb框架

在框架的設(shè)計(jì)和搭建中粤剧,因?yàn)槲覀€(gè)人十分不喜歡復(fù)雜的配置和冗余的代碼,雖然業(yè)務(wù)永遠(yuǎn)都是復(fù)雜到不能再復(fù)雜挥唠,但無論多么龐大的系統(tǒng)抵恋,都不可能滿足無限增長和復(fù)雜的業(yè)務(wù)模型,那么既然如此宝磨,為什么不把事情做簡單弧关,做一個(gè)最簡單的框架系統(tǒng)盅安,最少的代碼完成80%的日常常用功能呢?在PHPBean這個(gè)框架中梯醒,我盡可能地使用“約定實(shí)現(xiàn)”宽堆,嚴(yán)格規(guī)范的目錄結(jié)構(gòu),最少最少的代碼和系統(tǒng)層級(jí)茸习,實(shí)現(xiàn)一個(gè)MVC系統(tǒng)要做的基本事情畜隶。至于為什么選擇PHP,純粹是因?yàn)橄雽W(xué)學(xué)PHP号胚,和因?yàn)镻HP是腳本籽慢,部署方便

以上是我個(gè)人對(duì)于MVC框架的思考和理解,不過隨著時(shí)間的推移猫胁,就當(dāng)我沾沾自喜以為自己的框架已經(jīng)無懈可擊的時(shí)候箱亿,MVVM出世了,這個(gè)時(shí)候我才認(rèn)識(shí)到弃秆,原來的自己是多么幼稚(也許以后我還是會(huì)這么認(rèn)為)届惋,MVVM的設(shè)計(jì)思想和理念和我原先在設(shè)計(jì)實(shí)現(xiàn)PHPBean的時(shí)候有很多重疊,但是苦于當(dāng)時(shí)我根本不知道前端的東西菠赚,以為前端只有HTML,CSS,JQuery......

不過所幸的是脑豹,我遇到了一個(gè)前端朋友,一個(gè)很厲害的前端朋友衡查,引領(lǐng)我進(jìn)入了前端的世界瘩欺,還記得這是第一次我感覺到了自己就像剛邁入大學(xué)校園的記憶,知道原來前端的世界已經(jīng)翻天覆地拌牲。在NPM和VUE等等入門了之后俱饿,我開始思考后端,雖然SpringBoot已經(jīng)足夠強(qiáng)大塌忽,官網(wǎng)上眼花繚亂的組件拍埠,插件,真的是可以實(shí)現(xiàn)任何你想要的功能土居,而且都非常簡單枣购,再?zèng)]有以前SpringMVC那么復(fù)雜的配置。

但是總有那么一個(gè)疑問装盯,能不能再簡單點(diǎn)坷虑,能不能比SpringBoot再簡單,再輕量點(diǎn)~好吧埂奈,于是就有了現(xiàn)在的這篇文章

如果有任何的批評(píng)建議迄损,BUG反饋,問題反饋账磺,或是想法建議芹敌,幫助支持痊远,個(gè)人都十分歡迎,我個(gè)人的聯(lián)系方式如下:)

作者:CheneyXu

關(guān)于:XServer官網(wǎng)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末氏捞,一起剝皮案震驚了整個(gè)濱河市碧聪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌液茎,老刑警劉巖逞姿,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異捆等,居然都是意外死亡滞造,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門栋烤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谒养,“玉大人,你說我怎么就攤上這事明郭÷蚩撸” “怎么了?”我有些...
    開封第一講書人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵薯定,是天一觀的道長始绍。 經(jīng)常有香客問我,道長沉唠,這世上最難降的妖魔是什么疆虚? 我笑而不...
    開封第一講書人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任苛败,我火速辦了婚禮满葛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘罢屈。我一直安慰自己嘀韧,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開白布缠捌。 她就那樣靜靜地躺著锄贷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪曼月。 梳的紋絲不亂的頭發(fā)上谊却,一...
    開封第一講書人閱讀 51,604評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音哑芹,去河邊找鬼炎辨。 笑死,一個(gè)胖子當(dāng)著我的面吹牛聪姿,可吹牛的內(nèi)容都是我干的碴萧。 我是一名探鬼主播乙嘀,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼破喻!你這毒婦竟也來了虎谢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤曹质,失蹤者是張志新(化名)和其女友劉穎婴噩,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體羽德,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡讳推,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了玩般。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片银觅。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖坏为,靈堂內(nèi)的尸體忽然破棺而出究驴,到底是詐尸還是另有隱情,我是刑警寧澤匀伏,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布洒忧,位于F島的核電站,受9級(jí)特大地震影響够颠,放射性物質(zhì)發(fā)生泄漏熙侍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一履磨、第九天 我趴在偏房一處隱蔽的房頂上張望蛉抓。 院中可真熱鬧,春花似錦剃诅、人聲如沸巷送。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽笑跛。三九已至,卻和暖如春聊品,著一層夾襖步出監(jiān)牢的瞬間飞蹂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來泰國打工翻屈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留陈哑,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像芥颈,于是被迫代替她去往敵國和親惠勒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理爬坑,服務(wù)發(fā)現(xiàn)纠屋,斷路器,智...
    卡卡羅2017閱讀 134,657評(píng)論 18 139
  • 框架理念 最少的代碼盾计,完成最通用的功能售担,是最美的設(shè)計(jì) 有沒有比SpringBoot更簡單,更輕量署辉,幾乎不用寫代碼就...
    無聊數(shù)藏家閱讀 861評(píng)論 0 2
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,152評(píng)論 25 707
  • 還有一個(gè)月卸貨族铆,除了前期孕吐反應(yīng)外(肯定是遺傳老媽),整個(gè)孕期來說哭尝,還是蠻輕松的哥攘。 孕期做的檢查: 孕期產(chǎn)檢真的是...
    大墨青胭閱讀 225評(píng)論 1 0
  • 不知道什么時(shí)候開始覺的自己不在年輕。是否我們還能偶爾回憶過去材鹦,回憶那些懵懂無知的青春年少逝淹。小時(shí)候我們都在做著不同的...
    90后夜孤寒閱讀 205評(píng)論 0 1