express提供http服務(wù)功能實(shí)現(xiàn)示例
先看使用
const express = require('./express'); const app = express(); app.get('/',function (req,res){ res.end('/') }) app.get('/hello',function (req,res){ res.end('/hello'); }) app.listen(3000,function () { console.log('server start 3000'); })
兩個(gè)功能
- 執(zhí)行
listen
方法時(shí)創(chuàng)建服務(wù) - 訪問方法符合時(shí),訪問對(duì)應(yīng)路徑,執(zhí)行相應(yīng)回調(diào);均不匹配時(shí),返回固定 404 信息;
實(shí)現(xiàn)思路
注意到express
是一個(gè)函數(shù),其返回值是一個(gè)具有listen
、get
方法的對(duì)象,我們可以在express
的入口進(jìn)行定義,從而目光轉(zhuǎn)向?qū)?code>listen、get
方法的實(shí)現(xiàn)了
listen
方法就是對(duì)原生的http
模塊的一個(gè)封裝,我們只要在執(zhí)行時(shí)利用原生 node 模塊http
創(chuàng)建一個(gè)服務(wù)就可以了get
方法和【均不匹配兼容】其實(shí)是一個(gè)路由功能,目前可以先簡單的用一個(gè)隊(duì)列去實(shí)現(xiàn),每次執(zhí)行get
等路由方法,就將路徑和對(duì)應(yīng)處理函數(shù)入隊(duì)列,然后在請(qǐng)求來時(shí)進(jìn)行遍歷匹配即可。至于 404 兼容,我們可以在初始化時(shí)就存入一個(gè)處理函數(shù),這樣當(dāng)所有都沒有匹配上時(shí)就執(zhí)行即可
具體實(shí)現(xiàn)
const http = require('http') const url = require('url') function createApplication() { const router = [ { path: '*', method: '*', handler(req,res){ res.end(`Cannot ${req.method} ${req.url}`) } } ] return { get(path,handler){ router.push({ path, method: 'get', handler }) }, listen(port,cb){ let server = http.createServer(function (req,res) { let { pathname } = url.parse(req.url); // 獲取請(qǐng)求的路徑 let requireMethod = req.method.toLowerCase(); for (let index = 1; index < router.length; index++) { const {method,path,handler} = router[index]; if(pathname === path && requireMethod === method){ return handler(req, res); } } return router[0].handler(req,res); }) server.listen(...arguments) } } } module.exports = createApplication
以上就是express提供http服務(wù)功能實(shí)現(xiàn)示例的詳細(xì)內(nèi)容,更多關(guān)于express提供http服務(wù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Node.js報(bào)錯(cuò)信息Error:?Cannot?find?module?'XXX'問題及解
這篇文章主要介紹了Node.js報(bào)錯(cuò)信息Error:?Cannot?find?module?'XXX'問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10淺析node應(yīng)用的timing-attack安全漏洞
本篇文章給大家通過原理的原因分析了node應(yīng)用的timing-attack安全漏洞問題,有興趣的朋友閱讀參考下。2018-02-02Node登錄權(quán)限驗(yàn)證token驗(yàn)證實(shí)現(xiàn)的方法示例
這篇文章主要介紹了Node登錄權(quán)限驗(yàn)證token驗(yàn)證實(shí)現(xiàn)的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05node如何將package.json中的包降為低版本或者升級(jí)為高版本
比如現(xiàn)在你用某個(gè)包的當(dāng)前版本,但是你安裝的版本高了,那么你應(yīng)該這么做,首先刪除node項(xiàng)目中的node_modules目錄,防止安裝時(shí)的包不一致,下面給大家介紹node將package.json中的包降為低版本或者升級(jí)為高版本的方法,感興趣的朋友一起看看吧2023-11-11關(guān)于npm主版本升級(jí)及其相關(guān)知識(shí)點(diǎn)總結(jié)
npm是Node.js默認(rèn)的包管理器,以javascript?編寫的軟件包管理系統(tǒng)用于分享和使用代碼,下面這篇文章主要給大家介紹了關(guān)于npm主版本升級(jí)及其相關(guān)知識(shí)點(diǎn)總結(jié)的相關(guān)資料,需要的朋友可以參考下2022-12-12如何降低node版本,怎樣實(shí)現(xiàn)降低node版本
這篇文章主要介紹了如何降低node版本,怎樣降低node版本問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07