87 # express 应用和创建应用的分离

  1. 创建应用的过程和应用本身要进行分离。
  2. 路由和创建应用的过程也做一个分离。

下面实现创建应用的过程和应用本身要进行分离:

express.js

const Application = require("./application");function createApplication() {// 通过类来实现分离操作return new Application();
}module.exports = createApplication;

每次创建一个应用,路由系统应该是毫无关系的,应该创建一个全新的路由系统

新建 application.js

const http = require("http");
const url = require("url");function Application() {this.routers = [{path: "*",method: "all",handler: (req, res) => {res.end(`kaimo-express Cannot ${req.method} ${req.url}`);}} // 默认路由];
}Application.prototype.get = function (path, handler) {this.routers.push({path,method: "get",handler});
};Application.prototype.listen = function () {const server = http.createServer((req, res) => {const { pathname } = url.parse(req.url);const requestMethod = req.method.toLowerCase();for (let i = 1; i < this.routers.length; i++) {let { path, method, handler } = this.routers[i];if (path === pathname && method === requestMethod) {return handler(req, res);}}return this.routers[0].handler(req, res);});server.listen(...arguments);
};module.exports = Application;

测试一下:

const express = require("./kaimo-express");
const app = express();// 调用回调时 会将原生的 req 和 res 传入(req,res 在内部也被扩展了)
// 内部不会将回调函数包装成 promise
app.get("/", (req, res) => {res.end("ok");
});app.get("/add", (req, res) => {res.end("add");
});app.listen(3000, () => {console.log(`server start 3000`);console.log(`在线访问地址:http://localhost:3000/`);
});

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/81523.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

unity UDP 通信

客户端 接收端 &#xff1a; using System; using System.IO; using System.Collections; using System.Collections.Generic; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; using UnityEngine; using UnityEngine.UI;public cla…

常见音视频、流媒体开源编解码库及官网(四十一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…

Unity中Shader抓取屏幕并实现扭曲效果(优化)

文章目录 前言一、在之前顶点着色器的输入中&#xff0c;放弃了使用结构体传入&#xff0c;而是直接从应用程序阶段传入参数&#xff0c;这样写的话&#xff0c;对于程序来说&#xff0c;不方便扩张&#xff0c;所以需要对其进行修改实现1、定义结构体用于传入顶点坐标系2、因为…

开始撸 Android 源码

启动找工作模式&#xff0c;发现无比困难。搁在往日&#xff0c;大龄程序员找工作都是一件困难的事情&#xff0c;加上今年形势很差&#xff0c;更是难上加难。关键是我这十几年来主攻的浏览器内核方向&#xff0c;需求量更是几乎为零。在 BOSS 直聘上以 Chromium 为关键词&…

华为云云耀云服务器L实例评测|Git 私服搭建指南

前言 本文为华为云云耀云服务器L实例测评文章&#xff0c;测评内容是 云耀云服务器L实例 Git 私有服务器搭建指南 系统配置&#xff1a;2核2G 3M Ubuntu 20.04 我们平时在使用代码托管服务的时候&#xff0c;可能某些代码托管平台对成员有限制&#xff0c;或是由于内容原因会对…

教你如何清理 Docker 存储驱动的磁盘占用空间

Author&#xff1a;rab 有时候你会发现&#xff0c;你的 Docker 业务容器虽然做了数据持久化&#xff0c;且数据持久化的磁盘空间占用并不大&#xff0c;但是 Docker 的 Overlay2 目录占用却很大。我们知道 Overlay2 是 Docker 的存储驱动&#xff0c;也是 Docker 默认的存储驱…

Vue Router最佳实践,以确保你的Vue.js应用的路由管理清晰、可维护和高效

文章目录 路由结构设计命名路由动态路由参数导航守卫命名视图 (Named Views)懒加载路由错误处理 ✍创作者&#xff1a;全栈弄潮儿 &#x1f3e1; 个人主页&#xff1a; 全栈弄潮儿的个人主页 &#x1f3d9;️ 个人社区&#xff0c;欢迎你的加入&#xff1a;全栈弄潮儿的个人社区…

3D动画制作和渲染需要什么样的硬件规格?

动画是艺术与技术的令人兴奋的融合&#xff0c;为无限的创造力提供了广阔的画布。为了将创意愿景变为现实&#xff0c;动画师需要适合其工艺的强大计算资源。每个动画项目都有不同的硬件需求&#xff0c;无论是制作简单的 2D 动画还是构建复杂的 3D 世界。因此&#xff0c;有抱…

企业架构LNMP学习笔记51

企业案例使用&#xff1a; 主从模式&#xff1a; 缓存集群结构示意图&#xff1a; 去实现Redis的业务分离&#xff1a; 读的请求分配到从服务器上&#xff0c;写的请求分配到主服务器上。 Redis是没有中间件来进行分离的。 是通过业务代码直接来进行读写分离。 准备两台虚…

十七、Webpack搭建本地服务器

一、为什么要搭建本地服务器&#xff1f; 目前我们开发的代码&#xff0c;为了运行需要有两个操作&#xff1a; 操作一&#xff1a;npm run build&#xff0c;编译相关的代码&#xff1b;操作二&#xff1a;通过live server或者直接通过浏览器&#xff0c;打开index.html代码…

Datastage部署与使用

Datastage部署与使用 - 码农教程 https://www.cnblogs.com/lanston/category/739553.html Streamsets定时拉取接口数据同步到HBase集群_streamsets api_webmote的博客-CSDN博客 【SDC】StreamSets实战之路-28-实战篇- 使用StreamSets实时采集指定数据目录文件并写入库Kudu_菜…

【C语言】指针的进阶(二)—— 回调函数的讲解以及qsort函数的使用方式

目录 1、函数指针数组 1.1、函数指针数组是什么&#xff1f; 1.2、函数指针数组的用途&#xff1a;转移表 2、扩展&#xff1a;指向函数指针的数组的指针 3、回调函数 3.1、回调函数介绍 3.2、回调函数的案例&#xff1a;qsort函数 3.2.1、回顾冒泡排序 3.2.1、什么是qso…

构建工具Webpack简介

一、构建工具 当我们习惯了Node中使用ES模块化编写代码以后&#xff0c;用原生的HTML、CSS、JS这些东西会感觉到各种不便。比如&#xff1a;不能放心的使用模块化规范&#xff08;浏览器兼容性问题&#xff09;、即使可以使用模块化规范也会面临模块过多时的加载问题。 这时候…

基于uniapp开发 软盒APP系统源码 软件库系统源码 全开源

软盒APP前端-基于uniapp&#xff0c;一个开源的软件库系统 前端开源地址&#xff1a;软盒APP前端-基于uniapp: 软盒APP前端-基于uniapp (gitee.com) 更新说明 更新日期&#xff1a;2023.07.24 v1.0.8.23724 1.修复部分接口 2.删除根据标签获取软件列表接口&#xff0c;整合…

JDBC和DBUtils框架的使用

课程目录 一、JDBC概述 二、JDBC基本操作 三、使用PreparedStatement处理CRUD 四、数据库连接池 五、Apache的DBUtils 六、Dao类 一、JDBC概述 1. 为什么需要JDBC 没有JDBC时&#xff1a; 有了JDBC后&#xff1a; 2. JDBC概述 JDBC&#xff1a;Java Database Conn…

东芝电视Z750的音画效果好吗?调校的够真实吗?

精准匹配声音与画面,呈现“音画合一”的影院级视听盛宴,东芝电视Z750真的很不错,东芝电视拥有70余年的原色调校技术,色彩看起来细腻且舒服,饱和度和景深等都处理的很恰当,而且还有火箭炮音响系统,也是经过日本专业调校的,针对不同家居场景,都有不同的声音处理方案,让我们听到的…

竞赛选题 基于深度学习的人脸表情识别

文章目录 0 前言1 技术介绍1.1 技术概括1.2 目前表情识别实现技术 2 实现效果3 深度学习表情识别实现过程3.1 网络架构3.2 数据3.3 实现流程3.4 部分实现代码 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的人脸表情识别 该项目较…

Flutter——启动页白屏的优化

flutter启动页白屏的优化&#xff1a;使用图片替代白屏 结构图 核心的代码如上图&#xff0c;修改两个launch_background.xml里的代码为&#xff1a; <item><bitmapandroid:gravity"center"android:src"mipmap/ic_launcher" /></item>…

数据库直连提示 No suitable driver found for jdbc:postgresql

背景&#xff1a;我在代码里使用直连的方式在数据库中创建数据库等&#xff0c;由于需要适配各个数据库服务所以我分别兼容了mysql、postgresql、oracal等。但是在使用过程中会出现错误&#xff1a; No suitable driver found for jdbc:postgresql 但是我再使用mysql的直连方式…

AutoAnimate - 无需任何配置,一行代码自动为元素添加优雅的过渡动画,可以搭配 Vue / React 和 Sevelt 使用

这个动画库只要一行代码就可以自动在我们的组件中添过渡动画&#xff0c;为什么这么省事高效呢&#xff1f; AutoAnimate 是一个无需任何配置&#xff0c;自动为我们开发的 Web 项目添加平滑过渡动画的 JavaScript 工具库。AutoAnimate 和之前推荐的一些 js 动画库相比&#x…