概述
CRUD 就是我們常說的建立Create,讀取Read,更新Update,删除Delete。
這幾個操作是後端開發中最常見的幾個,舉個例子,比如說一個商品銷售的網站。它涉及的商品添加上架,提供商品給使用者浏覽,以及後續商品屬性更新,下架到最終撤走,都是圍繞一個商品進行CRUD的操作。當然實際操作會更加複雜。
從簡入手
前篇寫了一個更加參數name列印到響應傳回使用者端,在浏覽器展示。
這篇我們将建立一個商品product,然後我們圍繞商品做下面4個接口:
添加商品資訊
讀取商品資訊
更新商品資訊
删除商品
先看效果圖
讀取所有商品,打開浏覽器通路:http://localhost:8080/products
(下圖為FireFox 右鍵->檢視元素,這裡選擇火狐因為結果自動格式化了。 如果是Chrome

在上面網絡這一欄,我們可以進去看到,浏覽器通路這個接口連結本質上,是進行了一個GET 請求。
這裡有必要引入一個常用的指令行工具“curl”, 先記住簡單使用指令:
curl -X GET 目标連結
#上面的指令是使用curl工具對 目标連結 發起 GET 請求。
上圖左邊為接口測試視窗,右邊為接口服務的web程序。
由于浏覽器預設沒有安裝測試web api的工具,下面其他增加,删除,更新操作都使用curl工具進行
curl -X POST -H "Content-type: application/json" -d '{"id":5,"name":"Cannon","type":"Camera"}' http://localhost:8080/produc
- 删除商品資訊,效果如下
執行删除前,我們先查詢一下id為4的産品資訊,再執行删除,效果如下
右邊web程序輸出了最新産品資訊沒有id=4的記錄了,删除成功。
查詢商品資訊,效果如下
#查詢id=4的産品,沒有傳回,已删除
curl -X GET http://localhost:8080/product/4
#查詢id=5的産品,傳回id為5的産品資訊。
curl -X GET http://localhost:8080/product/5
修改商品資訊
#我們打算把id=5的産品名改為CannonX2
curl -X PUT -H "Content-type: application/json" -d '{"id":5,"name":"CannonX2","type":"Camera"}' http://localhost:8080/product
再回來講原理
快速過一下,curl工具的介紹
curl 是Linux類作業系統常見的Http請求用戶端,linux可以通過終端輸入:yum install -y curl 進行快速安裝。
簡單重複一下curl 的使用:curl -X 動作(http 方法) 連結(目标接口網址)
更多資訊看:
https://curl.se/download.html本篇重點
下面代碼重點解析,上圖多個接口的代碼實作。
關于server(http 服務建立) 沒有再次注釋,可以回顧前篇:
https://blog.csdn.net/geeklevin/article/details/109013368。
const restify = require('restify');
//加載了産品資訊的js子產品指派給pm常量
const pm = require('./product.js');
//這裡回顧上面示範第一個圖,通路連結前列印所有産品資訊
pm.show();
console.log(pm.query(1));
function read(req, res, next) {
....//省略擷取請求中id的代碼段
// 調用pm對象的查詢産品方法
res.send(pm.query(id))
}
function dele(req, res, next) {
....//省略擷取請求中id的代碼段
//調用pm對象的删除産品方法
res.send({status:'deleted',msg: pm.delete(id)})
}
function readAll(req, res, next){
//調用pm對象的讀取所有産品方法
res.send(pm.getData())
}
function create(req, res, next){
....//省略擷取請求中product的代碼段
//調用pm對象的增加産品方法
pm.add(product);
}
function update(req, res, next){
....//省略擷取請求中product的代碼段
//調用pm對象的修改産品方法
pm.update(product)
}
//這裡是前篇講過
var server = restify.createServer();
server.use(restify.plugins.bodyParser({ mapParams: true }));
//這裡重點,把readAll方法綁定到接口/products的GET動作
server.get('/products',readAll);
//這裡依次把 查/增/改/删 分别綁定到/product的GET / POST / PUT / DELETE 動作。
server.get('/product/:id', read);
server.post('/product', create);
server.put('/product', update);
server.del('/product/:id', dele);
//伺服器監聽8080端口
server.listen(8080, function() {
console.log('%s listening at %s', server.name, server.url);
});
上面通過restify 對應的server對象綁定了4個常用的HTTP請求方法,實作了對同個連結不同請求方法的不同響應。
在此,我們再拿一個更新産品操作解析:
curl -X PUT -H "Content-type: application/json" -d '{"id":5,"name":"CannonX2","type":"Camera"}' http://localhost:8080/product
使用者端:使用curl 針對/product接口,發起PUT請求
服務端:發現/product接口有效,并且綁定了更新産品方法到PUT方法,執行更新産品方法。
(最近想到了一個RESTFly工具在弄,拖了很久寫的這篇文章。歡迎讀者評論解析其他增加,删除,查詢的原理)
PS:上圖為重點代碼解析,省略了很多代碼(不作為可執行最終版)
項目完整代碼:
https://codechina.csdn.net/geeklevin/nodejs-api-002-crud