我開源的 Node Restful 的風格的 API 中間件,易使用。

Node 搭建的 Restful 的風格的 API 中間件沧侥,依賴于 Express 和 Mongoose

前言

npm install "ltz-rest" --save

依賴 mongoose 注冊模型可霎,兩句實現 rest API

//1.引入框架
const rest = require('ltz-rest');
app.use('/', rest);

  • 中間件自動生成: restful的約定風格API
URL HTTP 功能
/tab POST 創(chuàng)建對象
/tab GET 查詢對象
/tab/objectId GET 獲取對象
/tab/objectId PUT 更新對象
/tab/objectId DELETE 刪除對象

一、詳情使用

'use strict';

const mongoose = require('mongoose');
const db = mongoose.connect('mongodb://127.0.0.1:27017/test');

const express = require('express');
const app = express();

//1.引入框架
const rest = require('ltz-rest');
app.use('/', rest);

app.listen(3000);


const Schema = mongoose.Schema;

const student = {
    name: String,
    age: Number,
    sex: String,
    xuexiao: {
        type: Schema.Types.ObjectId,
        ref: 'school' 
    },
    score: {
        shuxue: Number,
        yuwen: Number
    }
};
//注冊 mongoose 的模型
mongoose.model('student', new Schema(student));

const school = {
    title: String
};
//注冊 mongoose 的模型
mongoose.model('school', new Schema(school));

由上面可知宴杀,我們有倆注冊模型 student school , 這倆注冊的模型都自動生成API癣朗;本插件依賴 mongoose ,只有注冊到mongoose.model() 才會自動生成 API

下面自動生成 student 5個 API 的使用

1:POST 創(chuàng)建數據


http://localhost:3000/student
body 包含 JSON 數據
{
    "age":5,
    "xuexiao":"58e8448918493009b7449229",
    "name":"小四",
    "score":{
        "shuxue":89,
        "yuwen":77
    },
    "sex":"woman"
}

返回數據
{
  "__v": 0,
  "age": 5,
  "xuexiao": "58e8448918493009b7449229",
  "name": "小四",
  "sex": "woman",
  "_id": "592a33db1b84a41131db2f56",
  "score": {
    "shuxue": 89,
    "yuwen": 77
  }
}

注意 POST旺罢,請求的主體必須是 JSON 格式旷余,而且 HTTP header 的 Content-Type 需要設置為 application/json

2:GET 查詢,所有的特殊性關鍵詞都是“_”開頭

查詢 student 文檔扁达,默認_limit=100
http://localhost:3000/student

查詢 student 文檔正卧,限制一條和跳過一跳:_limit=1&_skip=1
http://localhost:3000/student?_limit=1&_skip=1

查詢 student 文檔,數字大于跪解、小于穗酥、大于等于、小于等于惠遏、不等于的數字查詢砾跃;_gt _lt _gte _lte _ne
http://localhost:3000/student?_where={"score.shuxue":{"_gt":90}} //score.shuxue 大于90的

查詢 student 文檔,字符串根據「 正則表達式 」查詢节吮。 "_regex":"^李"抽高,"_regex":"李","_regex":"李$"透绩,名字開頭帶李,名字有李翘骂,名字結尾是李
http://localhost:3000/student?_where={"name":{"_regex":"^李"}} //名字開頭帶"李"

查詢 student 文檔,連表的顯示帚豪。 也就說xuexiao查詢出來不是id碳竟,查詢出來的是相應的文檔
http://localhost:3000/student?_populate=xuexiao

來一個綜合例子:查詢 student 文檔,score.shuxue 大于90且 name 帶“李”狸臣,xuexiao 連表顯示莹桅,限制一條數據。
http://localhost:3000/student?_where={"score.shuxue":{"_gt":90},"name":{"_regex":"李"}}&_populate=xuexiao&_limit=1

特殊關鍵詞_ 功能 演示
_limit 限制 _limit=10烛亦,限制返回10條數據
_skip 跳過 _skip=10诈泼,跳過10條數據
_gt、_lt煤禽、_gte铐达、_lte、_ne 限制數字:大于檬果、小于瓮孙、大于等于唐断、小于等于、不等于 _gt=10杭抠,大于10脸甘、_ne=20,不等于20
_regex 字符串根據「 正則表達式 」查詢 {"_regex":"^李"}祈争,名字開頭帶"李"
_populate 連表數據返回 _populate=xuexiao斤程,顯示 xuexiao 數據角寸,也可以用"."顯示更深層的數據:_populate=xuexiao.local菩混,可以把 xuexiao.local 的數據也展示出來

3:GET 根據唯一 id 查詢

查詢 student 文檔,唯一id 592a33bf1b84a41131db2f55 扁藕,如果需要學校數據需要_populate
http://localhost:3000/student/592a33bf1b84a41131db2f55?_populate=xuexiao

4:PUT 根據唯一 id 更新數據

修改數據 PUT沮峡, 年齡修改為18歲。 使用了 _populate 獲取學校信息亿柑。
http://localhost:3000/student/592a33bf1b84a41131db2f55?_populate=xuexiao
body 包含 JSON 數據
{
    "age":18
}

返回數據
{
  "_id": "592a33bf1b84a41131db2f55",
  "age": 18,
  "xuexiao": {
    "_id": "58ddd5db6216a905ce973de4",
    "name": "第一高中",
    "__v": 0
  },
  "name": "小紅2222",
  "sex": "woman",
  "__v": 0,
  "score": {
    "shuxue": 99,
    "yuwen": 88
  }
}

注意 PUT邢疙,請求的主體必須是 JSON 格式,而且 HTTP header 的 Content-Type 需要設置為 application/json

5:DELETE 根據唯一 id 刪除數據

DELETE 刪除文檔 id 為592a33bf1b84a41131db2f55
http://localhost:3000/student/592a33bf1b84a41131db2f55

返回數據
{
  "_id": "592a33bf1b84a41131db2f55",
  "age": 18,
  "xuexiao": "58ddd5db6216a905ce973de4",
  "name": "小紅2222",
  "sex": "woman",
  "__v": 0,
  "score": {
    "shuxue": 99,
    "yuwen": 88
  }
}

二望薄、跳過中間件

這個請求中間件不會執(zhí)行疟游,并且調用 next,執(zhí)行下一個中間件痕支。

// ALL:跳過所有的 API 請求
// GET:跳過 GET 請求
// 5個 API:GET,GETID,PUT,POST,DELETE颁虐,可以任意選擇跳過。
rest.skip = {
    'student':'ALL',//跳過 student 所有的API
    'school': 'GET,GETID'//跳過 school 的 GET 與 GETID,其它的 PUT,POST,DELETE 正常返回結果卧须。
}

GET獲取 school 文檔
http://localhost:3000/school
執(zhí)行失敗另绩,因為上面跳過GET

DELETE school 文檔刪除
http://localhost:3000/school/592a33bf1b84a41131db2f55
執(zhí)行成功,因為上面沒有跳過 DELETE 花嘶。



1.0 實現功能笋籽,配置是否跳過中間件。

0.9 書寫文檔椭员,并且發(fā)布NPM

0.8 實現Population

0.7 查詢端口實現數字大于车海、小于、等于隘击、不等于的數字查詢容劳。
gt lt gte lte ne

0.6 查詢端口實現字符串根據「 正則表達式 」查詢。
_where={name:{"_regex":"^李"}}

0.5 思想總結闸度、代碼設計竭贩、接口設計、寫一些demo莺禁、看文檔留量。

0.4 錯誤堆棧拋向前臺。

0.3 查詢接口實現排序。

0.2 版本已經實現5個接口楼熄,查詢接口僅僅實現了 skip 與 limit忆绰。

0.1 版本搭建框架,調試接口可岂。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市缕粹,隨后出現的幾起案子稚茅,更是在濱河造成了極大的恐慌,老刑警劉巖平斩,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亚享,死亡現場離奇詭異,居然都是意外死亡绘面,警方通過查閱死者的電腦和手機欺税,發(fā)現死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來揭璃,“玉大人晚凿,你說我怎么就攤上這事∈葩桑” “怎么了歼秽?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長扣墩。 經常有香客問我哲银,道長,這世上最難降的妖魔是什么呻惕? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任荆责,我火速辦了婚禮,結果婚禮上亚脆,老公的妹妹穿的比我還像新娘做院。我一直安慰自己,他們只是感情好濒持,可當我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布键耕。 她就那樣靜靜地躺著,像睡著了一般柑营。 火紅的嫁衣襯著肌膚如雪屈雄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天官套,我揣著相機與錄音酒奶,去河邊找鬼蚁孔。 笑死,一個胖子當著我的面吹牛惋嚎,可吹牛的內容都是我干的杠氢。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼另伍,長吁一口氣:“原來是場噩夢啊……” “哼鼻百!你這毒婦竟也來了?” 一聲冷哼從身側響起摆尝,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤温艇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后结榄,有當地人在樹林里發(fā)現了一具尸體中贝,經...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡囤捻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年臼朗,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蝎土。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡视哑,死狀恐怖,靈堂內的尸體忽然破棺而出誊涯,到底是詐尸還是另有隱情挡毅,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布暴构,位于F島的核電站跪呈,受9級特大地震影響,放射性物質發(fā)生泄漏取逾。R本人自食惡果不足惜耗绿,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望砾隅。 院中可真熱鬧误阻,春花似錦、人聲如沸晴埂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽儒洛。三九已至精耐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間琅锻,已是汗流浹背卦停。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工唐含, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人沫浆。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓捷枯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親专执。 傳聞我的和親對象是個殘疾皇子淮捆,可洞房花燭夜當晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現本股,斷路器攀痊,智...
    卡卡羅2017閱讀 134,637評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,838評論 25 707
  • 第一桶金因人而異,沒有一個統(tǒng)一的模式拄显。但也有一些要點苟径,不知是否可稱為規(guī)律。 首先躬审,機遇的把握棘街。 其次,創(chuàng)業(yè)的勇氣承边。...
    Rene_Yu閱讀 286評論 0 0
  • 一周總結: 定價調整偏見:雙贏談判遭殉,兩個基本思路,一是做大增量博助,大家為了共同的目標努力险污,合作雙方都能拿到比原有基礎...
    肉豆須張巍閱讀 174評論 0 0
  • 對不起,我的兒子—上帝賜給我的寶貝產業(yè)富岳,卻不小心攤上了個又兇又笨又懶的親媽蛔糯。 ...
    Sonia小確幸閱讀 220評論 2 2