作為一個(gè)合格的Developer寫一個(gè)自己的API來滿足腦袋里天馬行空的想法是必須的荐捻,雖然并不是非常專業(yè)的后臺(tái)工程師惑畴,更不是高大上的數(shù)據(jù)庫(kù)工程師蛋欣,但我有一顆什么都想插一腳不安分的小內(nèi)心,所以這次就來分享給大家一個(gè)入門級(jí)別的后臺(tái)如贷。麻雀雖小陷虎,五臟俱全,雖然很簡(jiǎn)單杠袱,但是我們?cè)撚械氖裁炊加小?/p>
先來簡(jiǎn)單介紹一下
1)編程語(yǔ)言JavaScript尚猿,下載Nodejs,Postgresql非常簡(jiǎn)單,這里兩個(gè)鏈接供參考http://www.runoob.com/nodejs/nodejs-install-setup.html
https://www.yiibai.com/postgresql/install-postgresql.html
友情提示楣富,安裝完之后不要忘記添加環(huán)境變量凿掂,安裝成功可以來檢查一下
2)Expressjs是一個(gè)輕量級(jí)Web框架,官方鏈接?https://expressjs.com/zh-cn/,使用Nodejs直接操作Postgresql需要安裝一個(gè)package纹蝴,官方鏈接https://node-postgres.com/
3)額外的package:body-parser是非常常用的一個(gè)express中間件庄萎,作用是對(duì)post請(qǐng)求的請(qǐng)求體進(jìn)行解析,參閱https://www.cnblogs.com/chyingp/p/nodejs-learning-express-body-parser.html
搭建一個(gè)簡(jiǎn)單的Express框架
先來看一下代碼
1)端口5000,設(shè)置頭文件解決萬年特別坑人的跨域問題(不安全塘安,但是適合搞事情糠涛,header還有一系列可設(shè)置參數(shù),請(qǐng)根據(jù)需求自行學(xué)習(xí)
2)bodyParser是用來解析post傳過來的json,或者form,text等content兼犯,limit如果不設(shè)置是有一個(gè)默認(rèn)值忍捡,如果你的數(shù)據(jù)量非常大超過了默認(rèn)值,服務(wù)器就會(huì)拒絕訪問
2)你的console看起來應(yīng)該是這樣切黔,表示正在監(jiān)聽
3)我們來發(fā)起一個(gè)get請(qǐng)求砸脊,渲染一個(gè)頁(yè)面,express的模板引擎是ejs纬霞,一個(gè)依賴注入的可兼容html語(yǔ)法的express專用可視化凌埂。這個(gè)有點(diǎn)復(fù)雜,我就簡(jiǎn)單展示一下诗芜,以后再慢慢來解釋侨舆。
因?yàn)樵O(shè)置了路由所以u(píng)rl看起來是這樣
我的超級(jí)簡(jiǎn)單index.ejs
配置數(shù)據(jù)庫(kù)
1)引入package
2)Get請(qǐng)求url:localhost:5000/retrieveFeature/
假設(shè)Get傳了參數(shù)绢陌,前面引入的body-parse可以幫助我們很簡(jiǎn)單解析數(shù)據(jù)挨下,不需要人工解析url.
我這里選擇的是創(chuàng)建pool進(jìn)程池,進(jìn)程池可以重復(fù)使用,檢測(cè)出來用戶后執(zhí)行操作脐湾,操作完畢釋放資源臭笆,一定要釋放,釋放。愁铺。鹰霍。不然進(jìn)程池就滿了,所有用戶都擠不進(jìn)來啦茵乱。
3)Post請(qǐng)求url:localhost:5000/getlocation/ 茂洒;data:{location:xxx,postal:yyy}
同樣解析出傳入?yún)?shù),并定義兩個(gè)儲(chǔ)存變量
根據(jù)客戶端傳入?yún)?shù)查找數(shù)據(jù)庫(kù)對(duì)應(yīng)數(shù)據(jù)瓶竭,
執(zhí)行完操作后還是切記要釋放你的連接督勺,不然就要交通堵塞了,CPU分分鐘爆滿斤贰。
數(shù)據(jù)庫(kù)常見操作
數(shù)據(jù)四大基本操作:增刪改查
現(xiàn)在我們來create一個(gè)table,名字叫testtable,設(shè)置id自增主鍵智哀,type為bigserisel,兩個(gè)字段col_1,col_2,type均為Character varying一個(gè)自動(dòng)記錄當(dāng)前時(shí)間的時(shí)間戳
1)增--INSERT
基本用法:INSERT INTO (數(shù)據(jù)表名稱)VALUES ( $1,$2..可理解為占位)RETURNING 字段1荧恍,字段2( 你想返回的字段瓷叫,也可以不返回), [實(shí)際參數(shù)1,實(shí)際參數(shù)2.送巡,..], (err,data)=>{回調(diào)}
再來看看客戶端網(wǎng)頁(yè)的情況
再來檢查一下數(shù)據(jù)是否插入成功
2)刪--DELETE
基本用法: DELETE FROM 數(shù)據(jù)表名稱? WHERE 限制條件 [RETURNING * 返回刪除記錄(可不要)]??
檢查一下數(shù)據(jù)庫(kù)
3)改--UPDATE
基本語(yǔ)法:UPDATE 數(shù)據(jù)表名稱 SET 字段1=,字段2=?[WHERE 篩選條件 RETURNING 需要返回的字段](非必需)
檢查一下數(shù)據(jù)庫(kù):
4)查--SELECT
基本語(yǔ)法:SELECT 字段 FROM 數(shù)據(jù)表名稱 [ WHERE 篩選條件 ORDER BY 什么順序](非必需)
對(duì)比一下數(shù)據(jù)庫(kù):
總結(jié)一下:
1)現(xiàn)在我們有了自己的小后臺(tái)次氨,雖然很簡(jiǎn)單但是基本功能都在,希望在此基礎(chǔ)上方便大家一起搞事情淮腾,畢竟我的api我做主
2)Express并沒有這么簡(jiǎn)單糟需,這只是很小很小的一部分屉佳,view部分以及router谷朝,ejs的網(wǎng)頁(yè)渲染還會(huì)有后續(xù)文章(我也在不斷探索學(xué)習(xí)中)
3)數(shù)據(jù)庫(kù)是要花時(shí)間專門來研究的,語(yǔ)法也是很多蠻復(fù)雜的武花,推薦看一下官方文檔http://www.postgresqltutorial.com/圆凰,會(huì)開啟另一片天地
奉獻(xiàn)了周六的一個(gè)下午,把上面的代碼每一段都完完整整的跑了一遍体箕,親測(cè)可用专钉。
我在盡量把文章寫的簡(jiǎn)單輕松一點(diǎn),編程本來就沒有那么難累铅,或許在配置和debug的過程中并沒有看起來這么容易跃须,那就多讀幾遍document,多試試娃兽,最后都能解決菇民,因?yàn)椴荒芙鉀Q的問題,壓根不會(huì)發(fā)生。
最近我一直在跟不同的計(jì)算機(jī)操作系統(tǒng)死磕第练,經(jīng)理希望我可以填補(bǔ)一下知識(shí)空白區(qū)阔馋,祝我順利進(jìn)階成功吧。