iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > html >Node.js中怎么实现一个express框架
  • 218
分享到

Node.js中怎么实现一个express框架

2024-04-02 19:04:59 218人浏览 安东尼
摘要

本篇文章给大家分享的是有关node.js中怎么实现一个express框架,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。express的基本用法

本篇文章给大家分享的是有关node.js中怎么实现一个express框架,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

express的基本用法

const express = require("express");  const app = express();  app.get("/test", (req, res, next) => {    console.log("*1");  //   res.end("2");    next();  });  app.get("/test", (req, res, next) => {    console.log("*2");    res.end("2");  });  app.listen(8888, (err) => {    !err && console.log("监听成功");  });
  •  当我访问localhost:8888/test时候,返回了:2,服务端打印了 

*1  *2
  •  从上面可以看到什么?

    •  express默认引入调用后返回一个app对象

    •  app.listen 会启动进程监听端口

    •  每次收到请求,对应的url和method会触发相应挂载在app上对应的回调函数

    •  调用 next 方法,会触发下一个

一起来实现一个简单的express框架

  •  定义属于我们的express文件入口,这里使用class来实现 

class express {  }  module.exports = express;
  •  需要的原生模块Http,创建进程监听端口 

const { createServer } = require("http");
  •  给 class 定义 listen 方法,监听端口 

class express {    listen(...args) {      createServer(cb).listen(...args);    }  }
  •  这样就可以通过调用 class 的 listen 去调用 http 模块的 listen 了,这里的cb我们可以先不管,你要知道每次接受到请求,必然会调用 cb 函数,这个是 createServer 原生模块帮我们封装好的

实现接收到请求触发

  •  实现app.get app.post等方法

    •  目前我们接受到响应,就会触发 cb 这个回调函数,那我们打印下,看看是什么参数? 

class express {    cb() {      return (req, res) => {        console.log(res, res, "开始行动");      };    }    listen(...args) {      createServer(this.cb()).listen(...args);    }  }
  •  发现此时的 req 和 res 正是我们想要的可读流和可写流.

  •  开始编写 get 和 post 方法

    •  这里注意,有路由是'/'的,这种是不管任何路由都会触发一次 

constructor() {      this.routers = {        get: [],        post: [],      };    }    get(path, handle) {      this.routers.get.push({        path,        handle,      });    }    post(path, handle) {      this.routers.post.push({        path,        handle,      });    }
  •  初始化时候定义 get、post 的数组储存对应的 path 和 handle.

  •  需要触发路由回调的时候,首先要找到对应的请求方式下对应的 url 的 handle 方法,然后触发回调.

  •  如何找到对应请求方式下的 url 对应的 handle 方法? 在接到请求时候就要遍历一次

    •  这里要考虑匹配多个路由,意味着,我们可能遇到像最开始一样,有两个 get 方式的 test 路由 

cb() {    return (req, res) => {      const method = req.method.toLowerCase();      console.log(this.routers[method], ",method");      const url = req.url;      this.routers[method].forEach((item) => {        item.path === url && item.handle(req, res);      });    };  }  listen(...args) {    createServer(this.cb()).listen(...args);  }
  •  上面根据 method 找到对应的数组,遍历找到请求的路由,触发回调,此时已经能正常返回数据了 

[ { method: 'get', path: '/test', handle: [Function] } ] ,method
  •  此时最简单的express已经完成了,但是我们好像忘了最重要的中间件

完成最重要的中间件功能

  •  首先要知道,express中间件分两种,一种带路由的,那就是根据路由决定是否触发

  •  另外一种就是不带路由的,像静态资源这种. 是用户访问任何路由都要触发一次的

  •  那我们需要一个 all 数组储存这种任意路由都需要匹配触发的 

constructor() {     this.routers = {       get: [],       post: [],       all: [],     };   }
  •  之前的直接通过 push 方式是太粗暴.如果用户需要中间件功能,不传路由,那就要做特殊处理,这里通过一个中间函数处理下

  •  改造get、post方法,定义handleAddRouter方法 

handleAddRouter(path, handle) {     let router = {};     if (typeof path === "string") {       router = {         path,         handle,       };     } else {       router = {         path: "/",         handle: path,      };     }     return router;   }   get(path, handle) {     const router = this.handleAddRouter(path, handle);     this.routers.get.push(router);   }   post(path, handle) {     const router = this.handleAddRouter(path, handle);     this.routers.post.push(router);   }   use(path, handle) {     const router = this.handleAddRouter(path, handle);     this.routers.all.push(router);   }
  •  每次添加之前,先触发一次handleAddRouter,如果是 path 为空的中间件,直接传入函数的,那么 path 帮它设置成'/'

  •  我们还遗留了一个点,next的实现,因为我们现在加了all这个数组后,意味着可能有多个中间件,那么可能一次请求打过来,就要触发多个路由

这里要注意,promise.then 源码实现和 express 的 next、以及 koa 的洋葱圈、redux 的中间件实现,有着一丁点相似,当你能真的领悟前后端框架源码时候,发现大都相似

  •  阅读我的文章,足以击破所有前后端源码.而且可以手写出来, 我们只学最核心的,抓重点学习,野蛮生长!

实现next

  •  思路:

    •  首先要找到所有匹配的路由

    •  然后逐个执行(看 next 的调用)

  •  定义search方法,找到所有匹配的路由 

search(method, url) {      const matchedList = [];      [...this.routers[method], ...this.routers.all].forEach((item) => {        item.path === url && matchedList.push(item.handle);      });      return matchedList;    }    cb() {      return (req, res) => {        const method = req.method.toLowerCase();        const url = req.url;        const matchedList = this.search(method, url);      };    }
  •  matchedList就是我们想要找到的所有路由

  •  为了完成next,我们要将req ,res , matchedList存入闭包中,定义handle方法 

handle(req, res, matchedList) {     const next = () => {       const midlleware = matchedList.shift();       if (midlleware) {         midlleware(req, res, next);       }     };     next();   }   cb() {     return (req, res) => {       const method = req.method.toLowerCase();       const url = req.url;       const matchedList = this.search(method, url);       this.handle(req, res, matchedList);     };   }
  •  这样我们就完成了next方法,只要手动调用 next 就会调用下一个匹配到的路由回调函数

  •  不到一百行代码,就完成了这个简单的express框架

以上就是node.js中怎么实现一个express框架,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网html频道。

--结束END--

本文标题: Node.js中怎么实现一个express框架

本文链接: https://www.lsjlt.com/news/74131.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Node.js中怎么实现一个express框架
    本篇文章给大家分享的是有关Node.js中怎么实现一个express框架,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。express的基本用法...
    99+
    2024-04-02
  • Node.js中Express框架怎么用
    本篇内容主要讲解“Node.js中Express框架怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Node.js中Express框架怎么用”吧!很多语言都有一些框架,这些框架可以帮助我们更...
    99+
    2023-06-17
  • Node.js的Express框架怎么使用
    本文小编为大家详细介绍“Node.js的Express框架怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Node.js的Express框架怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。目前比较流...
    99+
    2023-07-04
  • Node.js中怎么利用connect和express框架实现数学运算
    这期内容当中小编将会给大家带来有关Node.js中怎么利用connect和express框架实现数学运算,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、使用connec...
    99+
    2024-04-02
  • Node.js 中如何使用Express框架
    这期内容当中小编将会给大家带来有关Node.js 中如何使用Express框架,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Node.js Express 框架Expre...
    99+
    2024-04-02
  • Ajax 的初步实现(使用vscode+node.js+express框架)
    需求: 点击按钮 向服务端发送一个请求 然后将服务端返回的响应体结果在一个div中呈现出来 同时页面不刷新 一、 服务端的前期准备 安装node.js https://nodejs....
    99+
    2024-04-02
  • Node.js中Express框架怎么使用axios同步请求
    这篇文章主要介绍了Node.js中Express框架怎么使用axios同步请求的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Node.js中Express框架怎么使用axios同步请求文章都会有所收获,下面我们...
    99+
    2023-07-06
  • 怎么在Python中实现一个WSGI框架
    怎么在Python中实现一个WSGI框架?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。python有哪些常用库python常用的库:1.requesuts;2.scrapy;3...
    99+
    2023-06-14
  • Ubuntu下怎么搭建Node.js+express web开发框架
    这篇文章主要讲解了“Ubuntu下怎么搭建Node.js+express web开发框架”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Ubuntu下怎么搭建...
    99+
    2024-04-02
  • Node.js中Express框架的使用教程详解
    目录Express简介Express生成器1. 什么是Express生成器2. 安装Express生成器创建Express项目安装项目依赖运行Express项目Express目录结构...
    99+
    2024-04-02
  • Node.js中Express框架使用axios同步请求(async+await)实现方法
    axios一般是作为异步请求使用的,但是某种特殊情况下需要同步请求,如何实现呢? 首先定义一个方法syncAxios let axios = require('axios'); e...
    99+
    2023-05-15
    Node.js Express axios 同步请求 async await
  • Node.js中怎么实现一个AMF
    Node.js中怎么实现一个AMF,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。首先定义服务器端的类和方法exports.sa...
    99+
    2024-04-02
  • php7怎么实现一个简易框架
    本篇内容主要讲解“php7怎么实现一个简易框架”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php7怎么实现一个简易框架”吧!框架的核心链路是从开始的请求路由解析到控制器的分发,model的数据...
    99+
    2023-06-20
  • Python中怎么实现一个遗传算法框架
    本篇文章给大家分享的是有关Python中怎么实现一个遗传算法框架,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。算法特点以决策变量的编码作为运算对象,使得优化过程借鉴生物学中的概...
    99+
    2023-06-17
  • 使用Java怎么实现一个RPC框架
    使用Java怎么实现一个RPC框架?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、RPC简介RPC,全称为Remote Procedure Call,即远程过程调用,它是一个...
    99+
    2023-05-30
    java rpc
  • node.js三个步骤实现一个服务器及Express包使用
    目录用http 模块写一个简单的web服务器常见的几种文件类型及content-typeExpress基本介绍Express使用用http 模块写一个简单的web服务器 第一步:新建...
    99+
    2024-04-02
  • Node.js中Koa框架怎么用
    这篇文章主要介绍“Node.js中Koa框架怎么用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Node.js中Koa框架怎么用”文章能帮助大家解决问题。KoaKoa 是为了解决 ...
    99+
    2023-06-17
  • Express框架两个内置中间件方法怎么使用
    这篇文章主要介绍“Express框架两个内置中间件方法怎么使用”,在日常操作中,相信很多人在Express框架两个内置中间件方法怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Express框架两个内置...
    99+
    2023-07-05
  • Node.js Express 与其他框架的比较:发现最佳匹配
    ...
    99+
    2024-04-02
  • Vue-cli框架中怎么实现一个计时器应用
    Vue-cli框架中怎么实现一个计时器应用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。使用说明开始正计时:点击工具栏的“开始正计时”按钮即可,快捷键为"Enter&...
    99+
    2023-06-20
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作