日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

node --- 模拟express实现一个简单的服务器

發(fā)布時間:2023/12/10 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 node --- 模拟express实现一个简单的服务器 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目標(biāo)

  • 使用express實現(xiàn)一個監(jiān)聽3000端口的http服務(wù)如下
const express = require('express'); const app = express();app.get('/', (req, res) => {res.end('Hello Express'); }) app.get('/users',(req, res)=>{res.end(JSON.stringify({name: 'abc'})) }) app.listen(3000, ()=>{console.log('[server] server is running at http://localhost:3000 '); })
  • 我們想將第一行代碼變成如下的代碼
const express = require('./lxpress.js');
  • 即需要完成以下幾個操作
    1.會有一個router數(shù)組,當(dāng)使用app.get方法時,會將路徑和回調(diào)函數(shù)傳入
    2.調(diào)用listen方法時,會創(chuàng)建一個http服務(wù).該服務(wù)會從router數(shù)組中取出所有的路由進(jìn)行監(jiān)聽.然后根據(jù)傳入的參數(shù)進(jìn)行監(jiān)聽

實現(xiàn)

  • /lxpress.js
  • 基本架構(gòu)
const http = require('http'); let routers = []; class Application{get(){},listen(){} } module.exports = () =>{return new Application(); }
  • get邏輯的實現(xiàn).
    1.會接收2個參數(shù),path和handler
    2.將參數(shù)推進(jìn)routers中
    3.為了方便以后和POST方法區(qū)分,新增一個method屬性
get(path, handler){routers.push({path,method:'GET',handler}) }
  • listen邏輯的實現(xiàn)
    1.在里面會創(chuàng)建一個http服務(wù),該服務(wù)接收request和response兩個參數(shù)
    2.對routers里面的每一項進(jìn)行解析,并為每一項指定路由處理函數(shù)handler
    3.接收的參數(shù)用…arguments展開執(zhí)行
listen(){const server = http.createServer((req, res)=>{// 解構(gòu)出pathname// 使用到了url的解析需要導(dǎo)入 url --> const url = require('url');const { pathname} = url.parse(req.url, true);for(let router of routers){const {path, method, handler} = router; // 從每一項路由中解構(gòu)出path, method, handlerif(path === pathname && req.method === method){return handler(req, res);}}})server.listen(...arguments); }

總體代碼如下:

  • /lxpress.js
const http = require('http'); const url = require('url');const router = []; class Application {get(path, handler) {router.push({path,method: 'get',handler})}listen() {const server = http.createServer((req, res) => {const { pathname } = url.parse(req.url, true);for (const item of router) {const { path, method, handler } = item;if (pathname === path && req.method.toLowerCase() === method) {return handler(req, res);}}})server.listen(...arguments);} }module.exports = () => {return new Application() }

總結(jié)

以上是生活随笔為你收集整理的node --- 模拟express实现一个简单的服务器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。