国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【node.js從入門到精通】使用express創(chuàng)建web服務(wù)器,路由,進(jìn)行中間件的創(chuàng)建鏈接路由及其他中間件

這篇具有很好參考價(jià)值的文章主要介紹了【node.js從入門到精通】使用express創(chuàng)建web服務(wù)器,路由,進(jìn)行中間件的創(chuàng)建鏈接路由及其他中間件。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

前言

初識(shí)express

使用express創(chuàng)建基本的web服務(wù)器

初識(shí)express路由

路由匹配概念

路由模塊化

中間件

中間件和路由的區(qū)別

定義中間件函數(shù)

中間件作用?

?局部生效中間價(jià)

中間件分類

?1.應(yīng)用級(jí)別中間件

?2.路由級(jí)別的中間件

?3.錯(cuò)誤級(jí)別中間件

?4.內(nèi)置中間件

?5.自定義中間件

寫在最后



nodejs router.handle(req, res, next);,node專欄,前端,node.js,express

前言

express特別像node.js內(nèi)置的http模塊一樣,幫助我們來創(chuàng)建web服務(wù)器的,express實(shí)際上就是npm中的一個(gè)第三方的包,它里面提供了快捷創(chuàng)建Web服務(wù)器的方法,本篇將講到如何使用express進(jìn)行web服務(wù)器和路由的創(chuàng)建

初識(shí)express

既然是一個(gè)包那么首先就要進(jìn)行安裝這個(gè)包

使用npm i express@4.17.1來進(jìn)行安裝,安裝成功后就可以直接使用了

express給我們帶來的主要效果就是進(jìn)行一個(gè)服務(wù)器的創(chuàng)建,那么下面就讓我們一起來進(jìn)行一個(gè)最基本的服務(wù)器創(chuàng)建

使用express創(chuàng)建基本的web服務(wù)器

web服務(wù)器的創(chuàng)建一共分為三部

1.導(dǎo)入express

2.創(chuàng)建web服務(wù)器

3.調(diào)用app.listen(端口號(hào),回調(diào)函數(shù)),啟動(dòng)服務(wù)

// 導(dǎo)入express
const express = require('express');
// 創(chuàng)建web服務(wù)器
const app = express();
// 調(diào)用app.listen
app.listen(80, () => {
    console.log('express server running at http://localhost');
})

這樣一個(gè)簡單的服務(wù)器就創(chuàng)建好了(這么一看和http的用法差不多嗎)

getpost進(jìn)行一個(gè)請求的監(jiān)聽

● 監(jiān)聽GET請求

nodejs router.handle(req, res, next);,node專欄,前端,node.js,express

?● 監(jiān)聽post請求

nodejs router.handle(req, res, next);,node專欄,前端,node.js,express

?● 獲取URL中攜帶的查詢參數(shù)

通過req.query對象,可以訪問到客戶端通過查詢字符串的形式,發(fā)送到服務(wù)器的參數(shù)

● 獲取url中動(dòng)態(tài)參數(shù)

nodejs router.handle(req, res, next);,node專欄,前端,node.js,express

● 托管靜態(tài)資源

通過express.static()創(chuàng)建一個(gè)靜態(tài)資源服務(wù)器

nodejs router.handle(req, res, next);,node專欄,前端,node.js,express

?注:多次使用express.static()就可以得到多個(gè)靜態(tài)資源服務(wù)器了

初識(shí)express路由

在Express中,路由指的是客戶端的請求服務(wù)器處理函數(shù)之間的映射關(guān)系。 Express中的路由由3部分組成,分別是請求的類型、請求的URL地址、處理函數(shù)

nodejs router.handle(req, res, next);,node專欄,前端,node.js,express

?METHON(請求類型) PATH(請求URL地址) HANDLER(處理函數(shù))

路由匹配概念

當(dāng)一個(gè)請求到達(dá)服務(wù)器之后,需要先經(jīng)過路由的匹配,匹配成功之后,調(diào)用對應(yīng)的處理函數(shù)。 在匹配時(shí),會(huì)按照路由的順序進(jìn)行匹配,如果請求類型和請求的URL同時(shí)匹配成功,Express會(huì)將這次請求,轉(zhuǎn)交給對應(yīng)的function函數(shù)進(jìn)行處理。也就是說滿足請求類型和請求的URL同時(shí)匹配成功這個(gè)條件時(shí)才能進(jìn)行函數(shù)處理,否則不會(huì)進(jìn)行對客戶端的請求進(jìn)行處理

注:路由會(huì)按照定義的先后順序自上而下進(jìn)行匹配,并且請求類型和請求的URL必須匹配成功才能進(jìn)行函數(shù)處理

1.導(dǎo)入express模塊。2,掛載路由。3,監(jiān)聽80端口

const express = require('express');
const app = express()
// 掛載路由
app.get('/', (req, res) => {
    res.send('hello friend')
})
app.post('/', (req, res) => {
    res.send('hello my friend')
})
app.listen(80, () => {
    console.log('express server running at http://localhost');
})

路由模塊化

就是將路由模塊單獨(dú)提出來,進(jìn)行暴露共享,然后再供其他的模塊使用

nodejs router.handle(req, res, next);,node專欄,前端,node.js,express

const express = require('express');
// 導(dǎo)入express
const router = express.Router();
// 使用express.Router()創(chuàng)建路由對象
router.get('/user/list', (req, res) => {
    res.send('GET user list. ');
});
router.post('/user/add', (req, res) => {
    res.send('Add new user. ')
});
// 掛載路由
module.exports = router;
// 暴露共享對象

使用路由模塊

const express = require('express');
const app = express()
// 導(dǎo)入路由模塊
const router = require('./04路由模塊化.js')
// 注冊路由模塊,掛載前綴
app.use(router);
// app.use()用來注冊全局中間件
app.listen(80, () => {
    console.log('express server running at http://localhost');
})

中間件

中間件和路由的區(qū)別

express的中間件本質(zhì)上是一個(gè)函數(shù),它類似于路由處理函數(shù)我們可以進(jìn)行一下對比

nodejs router.handle(req, res, next);,node專欄,前端,node.js,express

區(qū)分他倆的標(biāo)志就是next這個(gè)參數(shù),有next函數(shù)的就是中間件的處理函數(shù),沒有的就是路由處理函數(shù),在預(yù)處理中next函數(shù)至關(guān)重要next函數(shù)是實(shí)現(xiàn)多個(gè)中間件連續(xù)調(diào)用的關(guān)鍵,它表示把流轉(zhuǎn)關(guān)系轉(zhuǎn)交給下一一個(gè)中間件或路由。

定義中間件函數(shù)

跟路由很相似

const express = require('express');
const app = express();
// 定義一個(gè)簡單的中間件函數(shù)
const mw = (req, res, next) => {
    console.log('中間件函數(shù)');
    next();
}
app.listen(80, () => {
    console.log('http://localhost');
})

全局中間件

就是客戶端無論發(fā)起什么請求,到達(dá)服務(wù)器之后都得出發(fā)的中間件叫做全局中間件

簡化中間件函數(shù)

nodejs router.handle(req, res, next);,node專欄,前端,node.js,express

中間件作用?

多個(gè)中間件之間,共享同一份req和res?;谶@樣的特性,我們可以在前面的的中間件中,統(tǒng)一為req或res對象添加自定義的屬性或方法,供后面的的中間件或路由進(jìn)行使用。(簡而言之,中間件里面的req,res可以供給后面的中間件或者是路由使用)

nodejs router.handle(req, res, next);,node專欄,前端,node.js,express

?局部生效中間價(jià)

不使用app.use()定義的中間件,叫做局部生效的中間件

const express = require('express');
const app = express();
// 1.定義中間件函數(shù)
const mw1 = (req, res, next) => {
    console.log('局部中間件已調(diào)用');
    next()
}
// 2.創(chuàng)建路由
app.get('/', mw1, (req, res) => {
    res.send('Home page.')
})
app.get('/user', (req, res) => {
    res.send('User page.')
})
app.listen(80, function () {
    console.log('Express ');

})

注意事項(xiàng): ?

①一定要在路由之前注冊中間件 ②客戶端發(fā)送過來的請求,可以連續(xù)調(diào)用多個(gè)中間件進(jìn)行處理 ③執(zhí)行完中間件的業(yè)務(wù)代碼之后,不要忘記調(diào)用next()函數(shù) ④為了防止代碼邏輯混亂,調(diào)用next()函數(shù)后不要再寫額外的代碼 ⑤連續(xù)調(diào)用多個(gè)中間件時(shí),多個(gè)中間件之間,共享req和res對象

中間件分類

在express中,把中間件分為了五大類分別是

1.應(yīng)用級(jí)別中間件

(通過app.use()/app.get()/app.post(),綁定到app實(shí)例上的中間件)

?nodejs router.handle(req, res, next);,node專欄,前端,node.js,express

?2.路由級(jí)別的中間件

?(綁定到express.Router(實(shí)例上的中間件,叫做路由級(jí)別的中間件。它的用法和應(yīng)用級(jí)別中間件沒有任何區(qū)別。只不過,應(yīng)用級(jí)別中間件是綁定到app實(shí)例上,路由級(jí)別中間件綁定到router實(shí)例上)

nodejs router.handle(req, res, next);,node專欄,前端,node.js,express

?3.錯(cuò)誤級(jí)別中間件

(專門用來捕獲整個(gè)項(xiàng)目中發(fā)生的異常錯(cuò)誤,從而防止項(xiàng)目異常崩潰的問題。錯(cuò)誤級(jí)別中間件的function處理函數(shù)中,必須有4個(gè)形參,形參順序從前到后,分別是(err, req, res, next),錯(cuò)誤級(jí)別的中間件一定要在路由后面否則不會(huì)執(zhí)行該錯(cuò)誤級(jí)別中間件。)

nodejs router.handle(req, res, next);,node專欄,前端,node.js,express

?4.內(nèi)置中間件

1.express.static快速托管靜態(tài)資源的內(nèi)置中間件

2.express.json解析JSON格式的請求體數(shù)據(jù)(4.16.0及以上版本可用)

3.express.urlencoded解析URL-encoded格式的請求體數(shù)據(jù)(4.16.0及以上版本可用)

nodejs router.handle(req, res, next);,node專欄,前端,node.js,express

?4.body-parser的使用

// 導(dǎo)入express 模塊
const express = require('express');
const app = express();
// 導(dǎo)入body-parser
const parser = require('body-parser');
// 注冊中間件
app.use(parser.urlencoded({ extended: false }))
app.post('/', (req, res) => {
    // 如果沒有配置任何解析表單數(shù)據(jù)的中間件,則req. body默認(rèn)等于undefined
    console.log(req.body);
    res.send('ok')
})
app.listen(80, () => {
    console.log('express server running at http://127.0.0.1');

})

5.自定義中間件

將該模塊進(jìn)行封裝

// 導(dǎo)入querystring內(nèi)置模塊
const qs = require('querystring');

const parser = (req, res, next) => {
    // 用來儲(chǔ)存客戶端發(fā)送的數(shù)據(jù)
    let str = ''
    // 監(jiān)聽req的data事件
    req.on('data', (chunk) => {
        str += chunk;
    })
    // 監(jiān)聽req的end事件
    req.on('end', () => {
        // 打印儲(chǔ)存完整的請求體數(shù)據(jù)        
        // 使用querystring內(nèi)置模塊解析請求體數(shù)據(jù)
        // 把字符串?dāng)?shù)據(jù)解析為對象格式
        // 將解析出來的數(shù)據(jù)對象掛載為req.body
        const body = qs.parse(str);
        req.body = body;
        next()
    })
}
module.exports = parser;

?使用該模塊

const express = require('express');
const app = express();
// 導(dǎo)入querystring內(nèi)置模塊
const qs = require('querystring');

// 定義解析表單的中間件具體的業(yè)務(wù)邏輯
const cousttomParser = require('./12對自定義的中間件進(jìn)行模塊化')
app.use(cousttomParser)
app.post('/', (req, res) => {
    res.send(req.body)
})
app.listen(80, () => {
    console.log('express server running at http://127.0.0.1');
})

使用apipost發(fā)送請求

nodejs router.handle(req, res, next);,node專欄,前端,node.js,express

寫在最后

點(diǎn)贊??:您的贊賞是我前進(jìn)的動(dòng)力!
收藏?:您的支持我是創(chuàng)作的源泉!
評(píng)論?:您的建議是我改進(jìn)的良藥!
山魚??的個(gè)人社區(qū):歡迎大家加——?山魚社區(qū)文章來源地址http://www.zghlxwxcb.cn/news/detail-786253.html

到了這里,關(guān)于【node.js從入門到精通】使用express創(chuàng)建web服務(wù)器,路由,進(jìn)行中間件的創(chuàng)建鏈接路由及其他中間件的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Node.js基本概念、特點(diǎn)、用途和常用模塊,以及Express框架開發(fā)一個(gè)web應(yīng)用

    Node.js基本概念、特點(diǎn)、用途和常用模塊,以及Express框架開發(fā)一個(gè)web應(yīng)用

    目錄 一、Node.js的基本概念和特點(diǎn) 二、Node.js的用途 三、Node.js的常用模塊 四、使用Node.js進(jìn)行Web開發(fā) 1. 安裝Node.js 2. PyCharm配置Node.js 3. 使用http庫編寫一個(gè)web服務(wù) 4. 使用Express框架構(gòu)建Web應(yīng)用程序 5. 調(diào)試代碼 6. 發(fā)布應(yīng)用程序 參考文章 ?Node.js系列文章推薦閱讀: JavaScript匿名函

    2024年02月07日
    瀏覽(26)
  • 如何使用Node.js快速創(chuàng)建本地HTTP服務(wù)器并實(shí)現(xiàn)異地遠(yuǎn)程訪問

    如何使用Node.js快速創(chuàng)建本地HTTP服務(wù)器并實(shí)現(xiàn)異地遠(yuǎn)程訪問

    Node.js 是能夠在服務(wù)器端運(yùn)行 JavaScript 的開放源代碼、跨平臺(tái)運(yùn)行環(huán)境。Node.js 由 OpenJS Foundation(原為 Node.js Foundation,已與 JS Foundation 合并)持有和維護(hù),亦為 Linux 基金會(huì)的項(xiàng)目。Node.js 采用 Google 開發(fā)的 V8 運(yùn)行代碼,使用事件驅(qū)動(dòng)、非阻塞和異步輸入輸出模型等技術(shù)來提高

    2024年02月05日
    瀏覽(113)
  • 如何使用Node.js快速創(chuàng)建本地HTTP服務(wù)器并實(shí)現(xiàn)公網(wǎng)訪問服務(wù)端

    如何使用Node.js快速創(chuàng)建本地HTTP服務(wù)器并實(shí)現(xiàn)公網(wǎng)訪問服務(wù)端

    ??????歡迎來到我的博客,很高興能夠在這里和您見面!希望您在這里可以感受到一份輕松愉快的氛圍,不僅可以獲得有趣的內(nèi)容和知識(shí),也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續(xù)學(xué)習(xí),不斷總結(jié),共同進(jìn)步,活到老學(xué)到老 導(dǎo)航 檀越劍指大廠系列:全面總

    2024年02月03日
    瀏覽(105)
  • 如何使用Node.js快速創(chuàng)建HTTP服務(wù)器并實(shí)現(xiàn)公網(wǎng)訪問本地Server

    如何使用Node.js快速創(chuàng)建HTTP服務(wù)器并實(shí)現(xiàn)公網(wǎng)訪問本地Server

    Node.js 是能夠在服務(wù)器端運(yùn)行 JavaScript 的開放源代碼、跨平臺(tái)運(yùn)行環(huán)境。Node.js 由 OpenJS Foundation(原為 Node.js Foundation,已與 JS Foundation 合并)持有和維護(hù),亦為 Linux 基金會(huì)的項(xiàng)目。Node.js 采用 Google 開發(fā)的 V8 運(yùn)行代碼,使用事件驅(qū)動(dòng)、非阻塞和異步輸入輸出模型等技術(shù)來提高

    2024年01月15日
    瀏覽(95)
  • 使用Node.js手?jǐn)]一個(gè)建靜態(tài)Web服務(wù)器,內(nèi)部CV指南

    使用Node.js手?jǐn)]一個(gè)建靜態(tài)Web服務(wù)器,內(nèi)部CV指南

    文章里有全部代碼,也可以積分下載 操作步驟如上圖 文章結(jié)束 話說這個(gè)鍵盤真漂亮~~ 1.1 靜態(tài)Web服務(wù)器概念 我們通常稱 靜態(tài)Web服務(wù)器 為 靜態(tài)網(wǎng)站 ,其主要特征就是服務(wù)器上的所有內(nèi)容都是現(xiàn)成的,不需要后端做額外的處理。當(dāng)我們向靜態(tài)服務(wù)器發(fā)送網(wǎng)頁請求時(shí),服務(wù)器只

    2023年04月08日
    瀏覽(95)
  • 使用Node.js和Web3.js實(shí)現(xiàn)鏈接MetaMask錢包并批量創(chuàng)建錢包并且批量發(fā)送代幣

    MetaMask是一款基于瀏覽器的插件錢包,它可以安全地存儲(chǔ)、發(fā)送和接收以太坊(Ethereum)代幣。而Web3.js是一款JavaScript庫,可以通過它連接以太坊區(qū)塊鏈網(wǎng)絡(luò)并管理以太坊錢包。 在此文中,我們將學(xué)習(xí)如何使用Node.js和Web3.js編程語言編寫代碼,實(shí)現(xiàn)鏈接MetaMask錢包并批量創(chuàng)建錢

    2024年02月08日
    瀏覽(53)
  • Node.js-Express框架基本使用

    Express是基于 node.js 的web應(yīng)用開發(fā)框架,是一個(gè)封裝好的工具包,便于開發(fā)web應(yīng)用(HTTP服務(wù)) 中間件(Middleware):是一個(gè)回調(diào)函數(shù),像路由一樣可以訪問請求對象(request, response). 作用:使用函數(shù)封裝公共操作,簡化代碼。 全局中間件 路由中間件 靜態(tài)資源中間件 注意事項(xiàng) 1、

    2024年02月12日
    瀏覽(26)
  • node.js 簡單實(shí)驗(yàn) 創(chuàng)建一個(gè)簡單的web服務(wù)

    node.js 簡單實(shí)驗(yàn) 創(chuàng)建一個(gè)簡單的web服務(wù)

    概要:用一個(gè)最簡單是例子感受一下node.js 的能力 1.代碼 2.運(yùn)行結(jié)果 2.1 node t.js 1.2 http://127.0.0.1:8081? ? ? ?

    2024年02月11日
    瀏覽(25)
  • 【小沐學(xué)Web】Node.js搭建HTTPS 服務(wù)器

    【小沐學(xué)Web】Node.js搭建HTTPS 服務(wù)器

    HTTPS是什么?HTTPS是基于TLS/SSL的HTTP協(xié)議。 HTTPS (全稱:Hypertext Transfer Protocol Secure),是以安全為目標(biāo)的 HTTP 通道,在HTTP的基礎(chǔ)上通過傳輸加密和身份認(rèn)證保證了傳輸過程的安全性。HTTPS 在HTTP 的基礎(chǔ)下加入SSL,HTTPS 的安全基礎(chǔ)是 SSL,因此加密的詳細(xì)內(nèi)容就需要 SSL。 HTTPS 存

    2024年02月11日
    瀏覽(27)
  • Jmeter(五) - 從入門到精通 - 創(chuàng)建網(wǎng)絡(luò)計(jì)劃實(shí)戰(zhàn)和創(chuàng)建高級(jí)Web測試計(jì)劃(詳解教程)

    Jmeter(五) - 從入門到精通 - 創(chuàng)建網(wǎng)絡(luò)計(jì)劃實(shí)戰(zhàn)和創(chuàng)建高級(jí)Web測試計(jì)劃(詳解教程)

    1.簡介 上一篇中已經(jīng)將其的理論知識(shí)介紹了一下,這一篇就帶著大家一步一步的把上一篇介紹的理論知識(shí)實(shí)踐一下,然后再說一下如何創(chuàng)建高級(jí)web測試計(jì)劃。 2.網(wǎng)絡(luò)計(jì)劃實(shí)戰(zhàn) 通過上一篇的學(xué)習(xí),將其分類為: (1)不需要登錄驗(yàn)證身份就可以操作的。 (2)需要登錄驗(yàn)證身份

    2024年02月13日
    瀏覽(35)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包