html 網(wǎng)站模板下載搜盤 資源網(wǎng)
一.什么是node.js
官網(wǎng)解釋:Node.js 是一個(gè)開源的、跨平臺(tái)的 JavaScript 運(yùn)行時(shí)環(huán)境。
二.初步使用node.js
需要區(qū)分開的是node.js和javascript互通的只有console和定時(shí)器兩個(gè)API.
三.Buffer
Buffer 是一個(gè)類似于數(shù)組的對象,用于表示固定長度的字節(jié)序列。
Buffer 本質(zhì)是一段內(nèi)存空間,專門用來處理二進(jìn)制數(shù)據(jù)。
特點(diǎn):
- Buffer 大小固定且無法調(diào)整
- Buffer 性能較好,可以直接對計(jì)算機(jī)內(nèi)存進(jìn)行操作
- 每個(gè)元素的大小為 1 字節(jié)(byte)
①Node.js中創(chuàng)建 buffer 的方式主要如下幾種:
②Buffer與字符串轉(zhuǎn)換
Number類型的toString()方法比較特殊,有默認(rèn)模式和基模式兩種。
四.fs模塊
文件操作
1.文件寫入
writeFile 異步寫入
writeFileSync 同步寫入
appendFile / appendFileSync 追加寫入
createWriteStream 流式寫入
①writeFile(異步寫入)
語法: fs.writeFile(file, data[, options], callback)
②writeFileSync(同步寫入)
語法: fs.writeFileSync(file, data[, options])
- 同步處理 JavaScript 主線程`會(huì)等待`其他線程的執(zhí)行結(jié)果,然后再繼續(xù)執(zhí)行主線程的代碼,效率較低
- 異步處理 JavaScript 主線程`不會(huì)等待`其他線程的執(zhí)行結(jié)果,直接執(zhí)行后續(xù)的主線程代碼,效率較好
③appendFile / appendFileSync (追加寫入)
語法:
- fs.appendFile(file, data[, options], callback)
- fs.appendFileSync(file, data[, options])
④createWriteStream ( 流式寫入)
程序打開一個(gè)文件是需要消耗資源的`,流式寫入可以減少打開關(guān)閉文件的次數(shù)。
流式寫入方式適用于`大文件寫入或者頻繁寫入`的場景, writeFile 適合于`寫入頻率較低的場景
語法:fs.createWriteStream(path[, options])
2.文件讀取
- readFile 異步讀取
- readFileSync 同步讀取
- createReadStream 流式讀取
①readFile (異步讀取)
②readFileSync (同步讀取)
③createReadStream (流式讀取)
3.文件復(fù)制
①method1
②method2 流式復(fù)制
還有一種方式
crf.pipe(cwf)
4.文件重命名和移動(dòng)
語法:
fs.rename(oldPath, newPath, callback)
fs.renameSync(oldPath, newPath)
參數(shù)說明:
* oldPath 文件當(dāng)前的路徑
* newPath 文件新的路徑
* callback 操作后的回調(diào)
①重命名
②移動(dòng)
fs.renameSync(oldPath, newPath)操作 略
5.文件刪除
①method1
②method2 nodejs 14.4版本引入
文件夾操作
1.創(chuàng)建文件夾
fs.mkdir(path [, options], callback)
fs.mkdirSync(path [, options])
遞歸創(chuàng)建:
2.讀取文件夾
fs.readdir(path [, options], callback)
fs.readdirSync(path [, options])
3.刪除文件夾
fs.rmdir(path [, options], callback)
:刪除一個(gè)空的文件夾。
如果刪除不為空的文件夾:
可以同樣使用遞歸刪除,但是不推薦利用fs.rmdir()進(jìn)行遞歸刪除,官方說將會(huì)棄用,推薦fs.rm()
fs.rm(path [, options], callback)
:刪除一個(gè)文件夾或者文件。
查看資源信息
fs.stat(path [, options], callback)
__dirname
因?yàn)橄鄬β窂降膮⒄瘴餅槊钚械墓ぷ髂夸?所以有不確定性:
__dirname與 require類似,都是 Node.js 環(huán)境中的’全局’變量
__dirname保存著當(dāng)前文件所在目錄的絕對路徑,可以使用 __dirname 與文件名拼接成絕對路徑
let data = fs.readFileSync(__dirname + ‘/data.txt’);
console.log(data);
練習(xí):批量重命名文件
const fs=require('fs')
// for(let i=1;i<=10;i++){
// fs.writeFileSync(`./test/${i}-test.js`,'hello')
// }
//批量重命名
const files=fs.readdirSync('./test')
files.forEach(item=>{let splitname=item.split('-')let[num,name]=splitnameif(Number(num)<10){num='0'+num}let newname=num+'-'+namefs.renameSync(`./test/${item}`,`./test/${newname}`)
})
五.path模塊
1.path.resolve([…paths]):
該方法將一系列路徑或路徑段解析為 絕對路徑.
①?zèng)]有傳遞任何值的話,返回當(dāng)前工具目錄
②給定的路徑序列從右到左處理,直到構(gòu)造絕對路徑。
③參數(shù)'/tmp/file/'
,如以斜杠開頭,被視為絕對路徑。此時(shí),路徑解析就從這個(gè)絕對路徑開始,完全忽略剩余的路徑參數(shù)
④如果只有一個(gè)相對路徑,返回當(dāng)前工作的絕對路徑
⑤經(jīng)典用法是傳入絕對路徑 + 相對路徑
2.path.sep
提供特定于平臺(tái)的 path segment separator(路徑分隔符):
- 在 Windows 上
/
在 POSIX 上
官方文檔給出的用例:
3.path.parse(path)
該方法返回一個(gè)對象,其屬性表示 的重要元素
4.獲取路徑/文件名/擴(kuò)展名
- 獲取路徑:path.dirname(
path
) - 獲取文件名:path.basename(
path[, suffix])
- 獲取擴(kuò)展名:path.extname(path)
①path.dirname(path
)
②**path.basename(path[, suffix])
**
path
<字符串>
官方文檔解釋:模塊的默認(rèn)操作因操作而異 運(yùn)行 Node.js 應(yīng)用程序的系統(tǒng)。具體來說,在 Windows 操作系統(tǒng),則模塊將假定 正在使用 Windows 樣式的路徑。
因此,在 POSIX 和 Windows 上使用可能會(huì)產(chǎn)生不同的結(jié)果:path.basename()
要在任何 操作系統(tǒng)中,請使用path.win32:
在任何 POSIX 文件路徑上使用 POSIX 文件路徑時(shí)獲得一致的結(jié)果 操作系統(tǒng)中,請使用path.posix:
③path.extname(path)
該方法返回 , 最后一部分出現(xiàn) 字符串末尾的’.'的字符
如果沒有則返回空
5.path.isAbsolute(path)
該方法確定 是否為絕對路徑
六.HTTP(Hypertext Transfer Protocol)協(xié)議
客戶端和服務(wù)器的傳輸協(xié)議
請求報(bào)文:從客戶端發(fā)往服務(wù)器的報(bào)文。
響應(yīng)報(bào)文:服務(wù)器收到請求報(bào)文后,作為響應(yīng)發(fā)往客戶端的報(bào)文文。
①請求報(bào)文:
請求行舉例:(http:80 https:443)
②響應(yīng)報(bào)文
響應(yīng)報(bào)文中:
七.IP
ip也稱為ip地址,本身就是一個(gè)數(shù)字標(biāo)識(shí)。用來標(biāo)識(shí)網(wǎng)絡(luò)中的設(shè)備,實(shí)現(xiàn)設(shè)備間通信。
本質(zhì)是一串32bit的二進(jìn)制數(shù)字->分隔成每8bit即1byte為一組就形成了ip地址。
IP地址由兩部分組成,即網(wǎng)絡(luò)地址和主機(jī)地址,二者是主從關(guān)系:
- 網(wǎng)絡(luò)號 net-id,它標(biāo)志主機(jī)(或路由器)所連接到的網(wǎng)絡(luò),網(wǎng)絡(luò)地址表示其屬于互聯(lián)網(wǎng)的哪一個(gè)網(wǎng)絡(luò)
2.主機(jī)號 host-id,它標(biāo)志該主機(jī)(或路由器),主機(jī)地址表示其屬于該網(wǎng)絡(luò)中的哪一臺(tái)主機(jī)。
兩級的 IP 地址可以記為: IP 地址 ::= { <網(wǎng)絡(luò)號>, <主機(jī)號>}
簡而言之就是:IP地址 = 網(wǎng)絡(luò)號+主機(jī)號
分為A、B、C三類及特殊地址D、E。
全0和全1的都保留不用。
八.HTTP模塊
1.啟動(dòng)http服務(wù)
(require->request)
2.http與https
協(xié)議端口區(qū)別:http默認(rèn)端口為80(http協(xié)議服務(wù)開發(fā)常用端口為3000,8080,8090,9000等) https默認(rèn)端口為443
3.獲取請求報(bào)文內(nèi)容
①請求路徑 URL路徑以及URL查詢字符串
直接獲取請求路徑:
會(huì)獲取路徑和查詢字符串 有時(shí)候需要拆分這個(gè)兩個(gè)模塊,此時(shí)借助url模塊
如果想直接獲取參數(shù)值而不是字符串
方法①
方法②(建議使用)
練習(xí):
const http = require(‘http’)
const server = http.createServer((request, response) => {
let url = new URL(request.url, ‘http://127.0.0.1’)
let { method } = request
let { pathname } = url
response.setHeader(‘content-type’, ‘text/html;charset=utf-8’)
if (method == ‘GET’ && pathname == ‘/login’) {
response.end(‘登陸頁面’)
} else if (method == ‘GET’ && pathname == ‘/reg’) {
response.end(‘注冊頁面’)
}else{
response.end(‘failure’)
}
})
server.listen(9000, () => {
console.log(‘success’)
})
4.獲取響應(yīng)報(bào)文內(nèi)容
如果要使用res.write()最后必須要有res.end,兩者是成對出現(xiàn)的,缺一不可,也就是說使用res.write方法向前端返回?cái)?shù)據(jù),必須調(diào)用res.end方法結(jié)束請求。否則瀏覽器會(huì)一直處于處于請求狀態(tài)
常見響應(yīng)狀態(tài)碼:
常見的十種:
200 : 成功,表示訪問成功,正常狀態(tài)。
301 : 永久移動(dòng),表示本網(wǎng)頁已經(jīng)永久性的移動(dòng)到一個(gè)新的地址,在客戶端自動(dòng)將請求地址改為服務(wù)器返回的新地址。
302 : 臨時(shí)重定向,表示網(wǎng)頁暫時(shí)性的轉(zhuǎn)移到一的新的地址,客戶端在以后可以繼續(xù)向本地址發(fā)起請求。
303 : 表示必須臨時(shí)重定向,并且必須使用GET方式請求。
304 : 重定向至瀏覽器本身,當(dāng)瀏覽器多次發(fā)起同一請求,且內(nèi)容未更改時(shí),使用瀏覽器緩存,這樣可以減少網(wǎng)絡(luò)開銷。
401 : 表示用戶沒有訪問權(quán)限,需要進(jìn)行身份認(rèn)證。
403 : 表示沒有權(quán)限,服務(wù)器拒絕訪問請求。
404 : 這是最常見的錯(cuò)誤,(請求的資源或者網(wǎng)頁不存在)表示找不到系統(tǒng)資源,但是只是暫時(shí)性地。
500 : 表示服務(wù)器程序錯(cuò)誤,一個(gè)通用的錯(cuò)誤信息。
503 : 表示服務(wù)器繁忙,或者服務(wù)器負(fù)載,通常這只是一個(gè)臨時(shí)狀態(tài)
練習(xí):
//fight.js
const http = require('http')
const fs = require('fs')
const server = http.createServer((request, response) => {let html = fs.readFileSync(__dirname + '/highlight.html')response.end(html)//響應(yīng)體可以執(zhí)行多次})
server.listen(9000, () => {console.log('success')
})
//highlight.html
<!DOCTYPE html>
<html lang="en">
<head>
? ? <meta charset="UTF-8">
? ? <meta name="viewport" content="width=device-width, initial-scale=1.0">
? ? <title>Document</title>
</head>
<body>
<table border="1">
? <tr>
? ? <td></td>
? ? <td></td>
? ? <td></td>
? </tr>
? <tr>
? ? <td></td>
? ? <td></td>
? ? <td></td>
? </tr>
? <tr>
? ? <td></td>
? ? <td></td>
? ? <td></td>
? </tr>
? <tr>
? ? <td></td>
? ? <td></td>
? ? <td></td>
? </tr>
</table>
</body>
<script>
? let highlight=document.querySelectorAll('td')
highlight.forEach(item=>{
? item.onclick=()=>{
? ? item.style.background='#fff'
? }
})
</script>
<style>
td{
? padding: 20px 40px;
}
table tr:nth-child(odd){
? background: aqua;
}
table tr:nth-child(even){
? background: rgb(96, 238, 143);
}table,td{
? border-collapse: collapse;
}</style></html>
5.資源服務(wù)
靜態(tài)資源是指內(nèi)容長時(shí)間不發(fā)生改變的資源
動(dòng)態(tài)資源是指內(nèi)容經(jīng)常更新的資源
靜態(tài)資源搭建:
const http = require(‘http’)
const fs = require(‘fs’)
const server = http.createServer((request, response) => {
let {pathname}=new URL(request.url,‘http://127.0.0.1’)
//根目錄
let root=__dirname+‘/page’
let filePath=root + pathname
fs.readFile(filePath,(err,data)=>{
if(err){
response.statusCode=500
response.end(‘error’)
return
}
response.end(data)
})
})
server.listen(9000, () => {
console.log(‘success’)
})
6.絕對路徑和相對路徑
絕對路徑在實(shí)際用的比較多
絕對路徑(框內(nèi)部分為常用)
相對路徑:
7.mime類型
動(dòng)態(tài)設(shè)置subType
處理亂碼:
8.get和post請求的區(qū)別
get請求通常用于從服務(wù)器獲取資源,參數(shù)暴露在URL中,存在安全隱患,并且傳輸長度受URL限制,一般為2k。
情況例舉:在地址欄輸入url訪問;點(diǎn)擊a鏈接;link標(biāo)簽引入css;;img標(biāo)簽引入圖片;script標(biāo)簽引入js;video與audio引入多媒體;form標(biāo)簽的method為get;ajax的get請求。
post請求通常用于向服務(wù)器提交數(shù)據(jù)或者創(chuàng)建新的資源。數(shù)據(jù)放在請求體中,而不是暴露在URL中,理論上來說沒有傳輸長度限制。
情況舉例:;form標(biāo)簽的method為post;ajax的post請求。
九.模塊化
將一個(gè)復(fù)雜的程序文件依據(jù)一定的規(guī)則拆分為多個(gè)文件的過程稱之為模塊化
其中拆分出的每個(gè)文件就是一個(gè)模塊,模塊的內(nèi)容數(shù)據(jù)是私有的,不過模塊可以暴露內(nèi)部數(shù)據(jù)以使其他模塊使用。
1.模塊暴露數(shù)據(jù)
注意:自己寫的導(dǎo)入模塊當(dāng)中./和…/是不可以省略的,導(dǎo)入nodejs內(nèi)置模塊才可以。
十.express框架
1.基本路由
_路由_用于確定應(yīng)用程序如何響應(yīng)對特定端點(diǎn)的客戶機(jī)請求,包含一個(gè) URI(或路徑)和一個(gè)特定的 HTTP 請求方法(GET、POST 等)。
每個(gè)路由可以具有一個(gè)或多個(gè)處理程序函數(shù),這些函數(shù)在路由匹配時(shí)執(zhí)行。
路由定義采用以下結(jié)構(gòu):
app.METHOD(PATH, HANDLER)
其中:
app
是express
的實(shí)例。METHOD
是HTTP 請求方法。PATH
是服務(wù)器上的路徑。HANDLER
是在路由匹配時(shí)執(zhí)行的函數(shù)。
有一種特殊路由方法:app.all()
,它并非派生自 HTTP 方法。該方法用于在所有請求方法的路徑中裝入中間件函數(shù)。
2.express中的API操作報(bào)文數(shù)據(jù)
請求報(bào)文:
原生
express API:
響應(yīng)報(bào)文:
注意:
1. res.send()響應(yīng)的數(shù)據(jù)是經(jīng)過處理的
res.send()會(huì)自動(dòng)發(fā)送更多的響應(yīng)報(bào)文頭,其中就有Content-Type:text/html;charset=utf-8,所以沒有亂碼。
即res.send返回的數(shù)據(jù)是被處理過的,打開瀏覽器控制臺(tái),在響應(yīng)頭中被自動(dòng)添加了context-type,也就是說,res.send()方法響應(yīng)返回給頁面數(shù)據(jù)時(shí),在響應(yīng)頭信息里會(huì)被自動(dòng)添加設(shè)置返回?cái)?shù)據(jù)類型的context-type屬性
2. res.send()只能被調(diào)用一次,因?yàn)樗韧趓es.write+res.end()
多個(gè)send輸出只執(zhí)行第一個(gè)send語句,后續(xù)send語句將不被執(zhí)行
重定向:
響應(yīng)json:
響應(yīng)文件內(nèi)容:
3.獲取路由參數(shù)
練習(xí):根據(jù)路由參數(shù)響應(yīng)歌手的信息
const express=require('express')
const {singers}=require('./singers.json')
const app=express();
app.get('/singer/:id.html',(req,res)=>{let {id}=req.paramslet result=singers.find(item=>{return(item.id==Number(id))})if(result==undefined){res.end('not found')}else{res.end(`<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><h1>${result.singer_name}</h1><img src='${result.singer_pic}' alt=""><h2>${result.singer_id}</h2><h2>${result.id}</h2></body></html>`)}})
app.listen(3000,()=>{console.log('3000 start')
}
)
4.中間件
中間件(Middleware)本質(zhì)是一個(gè)回調(diào)函數(shù)
中間件函數(shù)可以像路由回調(diào)一樣訪問 請求對象(request) ,響應(yīng)對象(response)
中間件的作用就是 使用函數(shù)封裝公共操作,簡化代碼
①全局中間件
②路由中間件
③靜態(tài)資源中間件
一個(gè)API解決了之前需要利用URL多次拼接才能達(dá)成的效果。
注意事項(xiàng):
①如果有index.html文件,則為默認(rèn)打開的資源
②如果靜態(tài)資源和路由同時(shí)匹配,誰先匹配響應(yīng)誰(單線程從上到下)
③路由響應(yīng)動(dòng)態(tài)資源,靜態(tài)資源中間件響應(yīng)靜態(tài)資源
練習(xí):
將手機(jī)和電腦置于同局域網(wǎng)下‘
將一個(gè)靜態(tài)頁面資源放置根目錄下:
電腦:
手機(jī):
5.獲取請求體信息
獲取請求體內(nèi)容需要利用中間件:
兩種方式:全局中間件和路由中間件
這里使用路由中間件:
6.防盜鏈
防盜鏈的作用:防止外部網(wǎng)站盜用本網(wǎng)站資源。(別人的域名沒辦法訪問服務(wù)資源)
app.use((req, res, next) => {
//檢測請求頭中的referer是否為127.0.0.1
//獲取referer
let referer = req.get(‘referer’)
if (referer) {
let url = new URL(referer)
let hostname = url.hostname;
console.log(hostname)
if(hostname !== ‘127.0.0.1’) {
res.status(404).send(‘404 not find
’);
}
}
next()
})
referer是header的一部分,當(dāng)瀏覽器向web服務(wù)器發(fā)送請求的時(shí)候,一般會(huì)帶上Referer,告訴服務(wù)器該網(wǎng)頁是從哪個(gè)頁面鏈接過來的,服務(wù)器因此可以獲得一些信息用于處理。在本機(jī)上就是:127.0.0.1:3000; localhost:3000。
當(dāng)我們獲取referer后,我們可以獲取域名。hostname用于獲取域名。獲取域名后,可以寫一個(gè)簡單的判斷,如果域名是127.0.0.1就可以顯示資源否則圖片請求不到。
這里要說一個(gè)細(xì)節(jié),細(xì)節(jié)就是,只有靜態(tài)資源里面 有圖片才可以正常獲取referer。
7.路由模塊化
8.ejs模板引擎
9.express-generator
Express 應(yīng)用程序生成器 - Express中文文檔 | Express中文網(wǎng)
文件上傳也是發(fā)送http報(bào)文
①處理文件上傳
利用工具包:formidable - npm然后配置post請求
保存:
var express = require('express');
var router = express.Router();
const formidable = require('formidable')
/* GET home page. */
router.get('/', function (req, res, next) {res.render('index', { title: 'Express' });
});
router.get('/protrait', (req, res) => {res.render('portrait')
})
router.post('/protrait', (req, res, next) => {const form = formidable({multiples: true,uploadDir: __dirname + '/../public/images',//保持文件后綴keepExtensions: true,});form.parse(req, (err, fields, files) => {if (err) {next(err);return;}console.log(fields)console.log(files)//服務(wù)器保存該圖片的訪問URLlet url='/images/'+files.protrait.newFilename//該數(shù)據(jù)以后需要存在數(shù)據(jù)庫res.send(url)// res.json({ fields, files });});
});
module.exports = router;
十一、mongoDB
Mongodb 中有三個(gè)重要概念需要掌握
**數(shù)據(jù)庫(**database) 數(shù)據(jù)庫是一個(gè)數(shù)據(jù)倉庫,數(shù)據(jù)庫服務(wù)下可以創(chuàng)建很多數(shù)據(jù)庫,數(shù)據(jù)庫中可以存 放很多集合
集合(collection) 集合類似于 JS 中的數(shù)組,在集合中可以存放很多文檔 文檔(document)
文檔是數(shù)據(jù)庫中的最小單位,類似于 JS 中的對象.
可以通過 JSON 文件來理解 Mongodb 中的概念
一個(gè) JSON 文件好比是一個(gè) 數(shù)據(jù)庫,
一個(gè) Mongodb 服務(wù)下可以有 N 個(gè)數(shù)據(jù)庫
JSON 文件中的 一級屬性的數(shù)組值好比是集合
數(shù)組中的對象好比是文檔
對象中的屬性有時(shí)也稱之為字段
一般情況下:
一個(gè)項(xiàng)目使用一個(gè)數(shù)據(jù)庫 一個(gè)集合會(huì)存儲(chǔ)同一種類型的數(shù)據(jù)
安裝方法:MongoDB新版本安裝配置教程(7.0.15版本-zip下載)-CSDN博客
1.Mongoose
Mongoose是一個(gè)對象文檔模型庫,方便使用代碼操作mongodb數(shù)據(jù)庫
npm i mongoose
①模型
Mongoose 中的一切都以 Schema 開頭。每個(gè) schema 都映射到一個(gè) MongoDB 集合中定義 Shape 的 Shape 并定義該集合中文檔的形狀。
模型的實(shí)例稱為文檔。模型負(fù)責(zé)創(chuàng)建和 從底層 MongoDB 數(shù)據(jù)庫中讀取文檔。
②字段類型
字段值校驗(yàn):
必須:
默認(rèn):
枚舉:
唯一(需要重建集合生效):
③文檔操作
刪除文檔
刪除多條則使用deleteMany
更新文檔
更新多條則使用updateMany
讀取文檔:
讀取單條還可以使用findById
讀取多條則使用find(有條件讀取滿足條件的所有,沒有則查詢文檔下所有)
④條件控制
運(yùn)算符
在 mongodb 不能 > < >= <= !== 等運(yùn)算符,需要使用替代符號
>使用 $gt
< 使用 $lt
>= 使用 $gte
<= 使用 $lte
!== 使用 $ne
let BookModel = mongoose.model(‘books’, BookSchema)
BookModel.find({price:{$lt:20}}).then(data=>{
console.log(data)
}).catch(err=>{
console.log(‘err’)
})
})
邏輯運(yùn)算
$or 邏輯或的情況
let BookModel = mongoose.model(‘books’, BookSchema)
BookModel.find({$or:[{author:‘吳承恩’},{author:‘余華’}]}).then(data=>{
console.log(data)
}).catch(err=>{
console.log(‘err’)
})
})
$and 邏輯與的情況同樣的用法
let BookModel = mongoose.model(‘books’, BookSchema)
BookModel.find({KaTeX parse error: Undefined control sequence: \[ at position 5: and:\?[?{price:{gt:10}},{price:{$lt:18}}]}).then(data=>{
console.log(data)
}).catch(err=>{
console.log(‘err’)
})
})
正則匹配
條件中可以直接使用 JS 的正則語法,通過正則可以進(jìn)行模糊查詢
let BookModel = mongoose.model(‘books’, BookSchema)
BookModel.find({name:new RegExp(‘紅’)}).then(data=>{
console.log(data)
}).catch(err=>{
console.log(‘err’)
})
})
⑤個(gè)性化讀取
十二.接口
接口是前后端通信的橋梁
簡單理解:一個(gè)接口就是服務(wù)器中的一個(gè)路由規(guī)則,根據(jù)請求響應(yīng)結(jié)果
接口->API(Application Program interface),所以有時(shí)稱之為API接口
這里的接口是數(shù)據(jù)接口 以其他部分編程語言中的接口語法不同。
接口一般組成部分:
- 請求方法
- 接口地址(URL)
- 請求參數(shù)
- 響應(yīng)結(jié)果
例如:身份證查詢-免費(fèi)API,收集所有免費(fèi)的API
1.RESTful API
RESTful API是一種特殊風(fēng)格的接口,主要特點(diǎn)有如下幾個(gè)
- URL中的路徑表示資源,路徑中不能有動(dòng)詞,例如create等
- 操作資源要與HTTP 請求方法對應(yīng)
- 操作結(jié)果要與HTTP 響應(yīng)狀態(tài)碼對應(yīng)
json-server
一個(gè)JS編寫的工具包,可以快速搭建RESTful API服務(wù)
2.接口測試工具
apipost: