中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

html 網(wǎng)站模板下載搜盤 資源網(wǎng)

html 網(wǎng)站模板下載,搜盤 資源網(wǎng),金華建設(shè)局網(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…

一.什么是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):

  1. Buffer 大小固定且無法調(diào)整
  2. Buffer 性能較好,可以直接對計(jì)算機(jī)內(nèi)存進(jìn)行操作
  3. 每個(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)
  • path<字符串>
  • 返回:

該方法返回一個(gè)對象,其屬性表示 的重要元素

4.獲取路徑/文件名/擴(kuò)展名
  • 獲取路徑:path.dirname(path)
  • 獲取文件名:path.basename(path[, suffix])
  • 獲取擴(kuò)展名:path.extname(path)
①path.dirname(path)
②**path.basename(path[, suffix])**

path<字符串>

  • suffix<字符串>要?jiǎng)h除的可選后綴
  • 返回:

官方文檔解釋:模塊的默認(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)系:

  1. 網(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)

其中:

  • appexpress的實(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:

http://www.risenshineclean.com/news/58990.html

相關(guān)文章:

  • 黑龍江網(wǎng)站設(shè)計(jì)企業(yè)網(wǎng)絡(luò)營銷青島
  • 安徽建網(wǎng)站公司營銷型網(wǎng)站建設(shè)怎么做
  • 做我女朋友網(wǎng)站免費(fèi)發(fā)帖推廣平臺(tái)有哪些
  • 網(wǎng)站建設(shè)彳金手指排名seo收費(fèi)低
  • 企業(yè)網(wǎng)站哪里可以做廣告外鏈購買交易平臺(tái)
  • 創(chuàng)新網(wǎng)站建設(shè)工作室營銷課程培訓(xùn)哪個(gè)機(jī)構(gòu)好
  • 免費(fèi)一級a做爰網(wǎng)站河南百度推廣公司
  • 做網(wǎng)站點(diǎn)擊賺取廣告費(fèi)百度關(guān)鍵字排名軟件
  • 提供低價(jià)網(wǎng)站建設(shè)seo5
  • 愛奇藝做視頻網(wǎng)站的怎么查權(quán)重查詢
  • 網(wǎng)站設(shè)計(jì)維護(hù)員長沙百度提升排名
  • 個(gè)人網(wǎng)站設(shè)計(jì)實(shí)驗(yàn)原理qq推廣工具
  • vshtml5網(wǎng)站開發(fā)提升網(wǎng)站權(quán)重的方法
  • 提供秦皇島網(wǎng)站建設(shè)哪里有國際軍事新聞最新消息
  • 中山網(wǎng)站建設(shè)前端開發(fā)
  • 政府網(wǎng)站建設(shè)的流程因素勞動(dòng)局免費(fèi)培訓(xùn)電工
  • 做網(wǎng)站銷售好做嗎電商推廣聯(lián)盟
  • 網(wǎng)站制作聯(lián)盟廈門百度推廣怎么做
  • 柳市做網(wǎng)站網(wǎng)上賣產(chǎn)品怎么推廣
  • 如何做能切換語言的網(wǎng)站網(wǎng)站建設(shè)公司哪家好?
  • 鄭州做網(wǎng)站價(jià)格微網(wǎng)站建站平臺(tái)
  • 網(wǎng)站結(jié)構(gòu)化數(shù)據(jù)愛站網(wǎng)關(guān)鍵詞長尾挖掘
  • 電腦做系統(tǒng)哪個(gè)網(wǎng)站比較好用西安網(wǎng)站外包
  • 有什么網(wǎng)站可以接淘寶設(shè)計(jì)單做淘寶指數(shù)
  • 商城網(wǎng)站制作的教程百度銷售是做什么
  • 免費(fèi)的模板網(wǎng)站廣州網(wǎng)絡(luò)推廣seo
  • 有哪個(gè)網(wǎng)站做正品港貨知乎推廣公司
  • 網(wǎng)站必須做ssl認(rèn)證淘寶店鋪推廣方式有哪些
  • 可做影視網(wǎng)站的服務(wù)器什么文案容易上熱門
  • 深圳龍華網(wǎng)站建設(shè)百度識(shí)圖搜索