自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 收藏
  • 关注

原创 Koa2 洋葱模型 —— compose 串联中间件的四种实现

原文出自:https://www.pandashen.com前言Koa 是当下主流 NodeJS 框架,以轻量见长,而它中间件机制与相对传统的 Express 支持了异步,所以编码时经常使用 async/await,提高了可读性,使代码变得更优雅,上一篇文章 NodeJS 进阶 —— Koa 源码分析,也对 “洋葱模型” 和实现它的 compose 进行分析,由于个人觉得 compose...

2018-10-23 01:40:23 1930

原创 NodeJS 进阶 —— Koa 源码分析

原文出自:https://www.pandashen.com前言Koa 2.x 版本是当下最流行的 NodeJS 框架,同时社区涌现出一大批围绕 Koa 2.x 的中间件以及基于 Koa 2.x 封装的企业级框架,如 egg.js,然而 Koa 本身的代码却非常精简,精简到所有文件的代码去掉注释后还不足 2000 行,本篇就围绕着这 2000 行不到的代码抽出核心逻辑进行分析,并压缩成一...

2018-10-23 01:40:12 433

原创 Express 中间件 body-parser 原理分析

原文出自:https://www.pandashen.com前言Express 是基于 NodeJS 平台的 Web 框架,应用广泛,在 Express 社区中有着大量的开发者通过 Express 中间件的特性,开发了各种功能的中间件,用来处理某些响应以及给请求对象 req、响应对象 res 添加属性或方法,我们接下来就通过分析常用的 body-parser 中间件的原理来了解如何开发 ...

2018-10-23 01:39:59 805

原创 Express 源码分析及简易封装

原文出自:https://www.pandashen.com前言Express 是 NodeJS 的 Web 框架,与 Koa 的轻量相比,功能要更多一些,依然是当前使用最广泛的 NodeJS 框架,本篇参考 Express 的核心逻辑来实现一个简易版,Express 源码较多,逻辑复杂,看一周可能也看不完,如果你已经使用过 Express,又想快速的了解 Express 常用功能的原理...

2018-10-23 01:39:50 1006

原创 Koa2 中间件原理解析 —— 看了就会写

原文出自:https://www.pandashen.com前言Koa 2.x 版本是当下最流行的 NodeJS 框架,Koa 2.0 的源码特别精简,不像 Express 封装的功能那么多,所以大部分的功能都是由 Koa 开发团队(同 Express 是一家出品)和社区贡献者针对 Koa 对 NodeJS 的封装特性实现的中间件来提供的,用法非常简单,就是引入中间件,并调用 Koa 的...

2018-10-23 01:39:39 1310

原创 NodeJS 使用 cookie 和 session

原文出自:https://www.pandashen.com前言由于浏览器无状态的特性,cookie 技术应运而生,cookie 是一个会话级的存储,大小 4KB 左右,用于浏览器将服务器设置的信息重新带给服务器进行验证,不支持跨域,在浏览器清空缓存或超过有效期后失效,不能存放敏感信息,session 是专门用于存储最初设置给浏览器 cookie 数据的地方,我们本篇就来讨论一下 coo...

2018-10-23 01:39:24 923

原创 通过一个案例理解 JWT

原文出自:https://www.pandashen.comJWT 简述JWT(json web token)是为了在网络应用环境之间传递声明而基于 json 的开放标准,JWT 的声明一般被采用在身份提供者和服务器提供者间传递被认证的身份信息,以便于从资源服务器获取资源。JWT 的应用场景JWT 一般用于用户登录上,身份认证在这种场景下,一旦用户登录完成,在接下来的每个涉及用户权...

2018-10-23 01:39:13 788

原创 MySQL —— 简单聊一聊数据库设计

原文出自:https://www.pandashen.com前言这是关于 MySQL 系列文章的第三篇,在前两篇文章 《MySQL —— 数据库基础》 和 《MySQL —— SQL 语句总结》 中,主要介绍了一些数据库的基础概念、创建表的方式以及 SQL 语句的使用,本篇在使用的基础上做一个小小的升华,来简单聊一聊数据库的设计,还有一句话不得不再次赘述,数据库博大精深,本系列文章内容较...

2018-10-23 01:39:02 1038

原创 MySQL —— SQL 语句总结

原文出自:https://www.pandashen.com前言这是关于 MySQL 系列文章的第二篇,在上一篇 《MySQL —— 数据库基础》 中,主要介绍了一些数据库的基础概念、创建表的方式以及使用 DDL 数据定义语言对表的操作,本篇的主要内容是在开发中使用 SQL 语句对数据库的增、删、改、查,函数、聚合函数的应用以及表连接,本篇大部分内容都贴近开发中的实际操作,不会像上一篇那...

2018-10-23 01:38:52 1860

原创 MySQL —— 数据库基础

原文出自:https://www.pandashen.com前言MySQL 是目前使用最广泛的关系型数据库,是在软件开发中所必备的技能之一,这是关于 MySQL 的系列文章,将从 MySQL 的基本概念、基本使用、SQL 语句、函数、聚合函数、表连接以及表设计等多方面对 MySQL 进行总结,而本篇是数据库基础部分,大多都是一些概念性的内容和表的创建,数据库博大精深,本系列文章内容较浅,...

2018-10-23 01:38:26 212

原创 Webpack 核心模块 tapable 解析

原文出自:https://www.pandashen.com前言Webpack 是一个现代 JavaScript 应用程序的静态模块打包器,是对前端项目实现自动化和优化必不可少的工具,Webpack 的 loader(加载器)和 plugin(插件)是由 Webpack 开发者和社区开发者共同贡献的,而目前又没有比较系统的开发文档,想写加载器和插件必须要懂 Webpack 的原理,即看懂...

2018-10-17 00:04:32 538

原创 NodeJS 多进程和集群

原文出自:https://www.pandashen.com进程和线程“进程” 是计算机系统进行资源分配和调度的基本单位,我们可以理解为计算机每开启一个任务就会创建至少一个进程来处理,有时会创建多个,如 Chrome 浏览器的选项卡,其目的是为了防止一个进程挂掉而应用停止工作,而 “线程” 是程序执行流的最小单元,NodeJS 默认是单进程、单线程的,我们将这个进程称为主进程,也可以通过...

2018-10-17 00:04:17 577

原创 Webpack —— tree-starking 解析

原文出自:https://www.pandashen.comtree-sharking 简介tree-sharking 是 Webpack 2 后续版本的优化功能,顾名思义,就是将多余的代码给 “摇晃” 掉,在开发中我们经常使用一些第三方库,而这些第三方库只使用了这个库的一部门功能或代码,未使用的代码也要被打包进来,这样出口文件会非常大,tree-sharking 帮我们解决了这个问题,...

2018-10-17 00:04:05 245

原创 AST 抽象语法树

原文出自:https://www.pandashen.comAST 抽象语法树简介AST(Abstract Syntax Tree)是源代码的抽象语法结构树状表现形式,Webpack、ESLint、JSX、TypeScript 的编译和模块化规则之间的转化都是通过 AST 来实现对代码的检查、分析以及编译等操作。JavaScript 语法的 AST 语法树JavaScript 中想...

2018-10-17 00:03:52 2869

原创 命令行工具 —— 手写类似 http-server 的静态服务器

原文出自:https://www.pandashen.com前言npm 里有个 http-server 的模块,是一个简单的、零配置的 HTTP 服务,它非常强大,同时非常简单,可以方便的帮助我们开启本地服务器,以及局域网共享,可以用来做测试,开发,学习时的环境配置,我们本节就模拟 http-server 实现一个自己的启动本地服务的命令行工具。http-server 使用http...

2018-10-17 00:03:42 448

原创 HTTP 缓存的那些事儿

原文出自:https://www.pandashen.com前言HTTP 缓存机制作为 Web 应用性能优化的重要手段,对于从事 Web 开发的同学们来说,应该是知识体系的基础环节,也是想要成为前端架构的必备技能。缓存的作用我们为什么使用缓存,是因为缓存可以给我们的 Web 项目带来以下好处,以提高性能和用户体验。加快了浏览器加载网页的速度;减少了冗余的数据传输,节省网络流量...

2018-10-17 00:03:31 148

原创 NodeJS 加密 —— crypto 模块

原文出自:https://www.pandashen.com加密简介加密是以某种算法改变原有的信息数据,使得未授权用户即使获得了已加密信息,因不知解密的方法,无法得知信息真正的含义,通过这种方式提高网络数据传输的安全性,加密算法常见的有哈希算法、HMAC 算法、签名、对称性加密算法和非对称性加密算法,加密算法也分为可逆和不可逆,比如 md5 就是不可逆加密,只能暴力破解(撞库),我们在 ...

2018-10-17 00:03:17 815

原创 NodeJS 服务器实现 gzip 压缩

原文出自:https://www.pandashen.com概述在浏览器向服务器请求静态资源时,服务器为了减小在网络传输过程中消耗的流量和时间,都是将静态资源经过压缩后返回给服务器的,实现压缩的算法有 deflate 和 gzip 等,最常用的是 gzip 压缩。gzip 简介在浏览器和服务器之间通过 gzip 压缩流实现传输的过程可以用下图表示。当浏览器向服务器请求静态资源,...

2018-10-17 00:03:04 8223 2

原创 NodeJS 实现多语言

什么是多语言?原文出自:https://www.pandashen.com我们平时访问一些文档类型的网站时,经常可以看到页面右上角有一个下拉框用来选择当前页面支持的语言,并在选中后将整个网页的内容切换为选中的语言,这就是项目中的多语言,多语言可以根据浏览器请求发送的语言类型在服务器进行设置,也可以在请求服务器时返回多种语言,并根据权重和浏览器的支持情况进行选择和渲染。功能描述在本文...

2018-10-17 00:02:52 2652

原创 NodeJS 服务器数据处理(表单、json 字符串和普通字符串)

原文出自:https://www.pandashen.com前言从浏览器向服务器提交数据时,常见有表单提交,JSON 字符串提交和普通字符串提交,不同情况需要附带不同的请求头信息,告诉服务器客户端可以直接解析的数据格式,如果发送的数据为 json 字符串,后两种类型都可以成功发送到服务器,只是加上请求头信息服务器更容易判断该以什么格式返回数据。querystring 模块解析请求体...

2018-10-17 00:02:40 1271

原创 NodeJS 服务器实现资源防盗链

原文出自:https://www.pandashen.com什么是 “盗链”?“盗链” 说白了就是利用别人网站的资源链接放在自己的站点,在未经允许的情况下去获取别人网站里面的图片或者视频等资源,导致资源所有者的网站的流量费用增加或收入减少,为了防止资源链接随意被人盗用的手段被称为 “防盗链”。模拟 “盗链” 场景我们先来模拟一下 “盗链” 场景,在本地启动服务运行 hotlinki...

2018-10-16 22:40:45 889

原创 NodeJS 使用 Range 请求实现下载功能

原文出自:https://www.pandashen.com前言本篇使用 NodeJS 的 HTTP 服务创建客户端,使用 Range 请求实现下载功能,并通过本篇的 Demo 扩展在业务中实现断点续传等功能的思路。服务端的实现我们通过 http 模块创建服务器处理 Range 请求,在服务器代码中我们为了减少回调嵌套使用 async 函数,所以需要将异步的操作方法转换成 Prom...

2018-10-16 22:40:15 2403

原创 NodeJS 搭建 HTTP 服务器

原文出自:https://www.pandashen.com前言在 NodeJS 中用来创建服务的模块是 http 核心模块,本篇就来介绍关于使用 http 模块搭建 HTTP 服务器和客户端的方法,以及模块的基本 API。HTTP 服务器1、创建 HTTP 服务器在 NodeJS 中,创建 HTTP 服务器可以与 net 模块创建 TCP 服务器对比,创建服务器有也两种方式。...

2018-10-16 22:39:58 1185

原创 HTTP 基础

原文出自:https://www.pandashen.comHTTP 和 TCP 的关系HTTP 是在 TCP 传输协议上层的应用层协议,主要解决如何包装数据的问题,关于 TCP/IP 和 HTTP 协议的关系,网络有一段比较容易理解的介绍:“我们在传输数据时,可以只使用(传输层)TCP/IP 协议,但是如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协...

2018-10-16 22:39:44 111

原创 基于 TCP 实现简易聊天室

原文出自:https://www.pandashen.com前言TCP 为传输层协议,在 NodeJS 中,基于 TCP 的核心模块为 net,http 和 https 模块都是基于 net 实现的,我们先简单介绍 net 的用法,再根据 net 实现一个简易的聊天室。net 模块的基本用法1、使用 net 创建一个网络服务方式 1:const net = require("n...

2018-10-16 22:39:25 2302

原创 使用 NodeJS 可读流实现 “行读取器”

原文出自:https://www.pandashen.com前言本文是对于 NodeJS 核心模块 fs 可读流 createReadeStream 的应用,实现 “行读取器”,功能为读取一个文档的内容,每读完一行触发一次监听的事件,并对这一行数据进行处理。LineReader 类的创建实现 “行读取器” 的整体思路是创建一个类的实例,然后在这个实例上监听一个事件,并开始读取文件,...

2018-10-16 22:39:04 608

原创 NodeJS —— 自定义流的实现

原文出自:https://www.pandashen.com概述常见的自定义流有四种,Readable(可读流)、Writable(可写流)、Duplex(双工流)和 Transform(转换流),常见的自定义流应用有 HTTP 请求、响应,crypto 加密,进程 stdin 通信等等。stream 模块介绍在 NodeJS 中要想实现自定义流,需要依赖模块 stream,直接引...

2018-10-16 22:38:49 536

原创 NodeJS —— 流的原理分析与简易实现

原文出自:https://www.pandashen.com前言在之前的博客中已经了解了流的基本用法,这篇的重点在于根据可读流的用法对可读流的原理进行分析,实现简易版的 ReadStream,流的基本用法请看这里 NodeJS —— Stream 的基本使用。可读流的实现(流动模式)1、ReadStream 类创建在使用 fs 的 createReadStream 创建可读流时,...

2018-10-16 22:38:32 670

原创 NodeJS —— Stream 的基本使用

原文出自:https://www.pandashen.com流的介绍在 NodeJS 中,我们对文件的操作需要依赖核心模块 fs,fs 中有很基本 API 可以帮助我们读写占用内存较小的文件,如果是大文件或内存不确定也可以通过 open、read、write、close 等方法对文件进行操作,但是这样操作文件每一个步骤都要关心,非常繁琐,fs 中提供了可读流和可写流,让我们通过流来操作文...

2018-10-16 22:38:14 254

原创 NodeJS 树结构遍历 —— 深度优先和广度优先

原文出自:https://www.pandashen.com树的基本概念树(Tree)是 n 个结点的有限集,n 为 0 时,称为空树,在任意一棵非空树中有且仅有一个特定的被称为根(Root)的结点,当 n 大于 1 时,其余结点可分为 m 个互不相交的有限集 T1、T2、......、Tm,其中每一个集合本身又是一棵树,并且称为 SubTree,即根的子树。需要强调的是,n>0...

2018-10-16 22:37:44 933

原创 NodeJS 文件操作 —— fs 基本使用

原文出自:https://www.pandashen.comfs 概述在 NodeJS 中,所有与文件操作都是通过 fs 核心模块来实现的,包括文件目录的创建、删除、查询以及文件的读取和写入,在 fs 模块中,所有的方法都分为同步和异步两种实现,具有 sync 后缀的方法为同步方法,不具有 sync 后缀的方法为异步方法,在了解文件操作的方法之前有一些关于系统和文件的前置知识,如文件的权...

2018-10-12 00:15:23 27632 1

原创 NodeJS —— Buffer 解读

原文出自:https://www.pandashen.comBuffer 概述在 ES6 引入 TypedArray 之前,JavaScript 语言没有读取或操作二进制数据流的机制。 Buffer 类被引入作为 NodeJS API 的一部分,使其可以在 TCP 流或文件系统操作等场景中处理二进制数据流。Buffer 属于 Global 对象,使用时不需引入,且 Buffer 的大小...

2018-10-12 00:15:07 2929

原创 EventEmitter 源码分析与简易实现

原文出自:https://www.pandashen.comEventEmitter 简介EventEmitter 是 NodeJS 的核心模块 events 中的类,用于对 NodeJS 中的事件进行统一管理,用 events 特定的 API 对事件进行添加、触发和移除等等,核心方法的模式类似于发布订阅。实现 EventEmitter1、EventEmitter 构造函数的实现...

2018-10-12 00:14:53 1003

原创 CommonJS 模块化简易实现

原文出自:https://www.pandashen.comCommonJS 概述CommonJS 是一种模块化的标准,而 NodeJS 是这种标准的实现,每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。NodeJS 模块化的简易实现在实现模块加载之前,我们需要清除模块的加载过程:假设 A 文件夹下有一个 a.js,我们要...

2018-10-12 00:14:41 1394

原创 高阶函数应用 —— 柯里化与反柯里化

原文出自:https://www.pandashen.com前言在 JavaScript 中,柯里化和反柯里化是高阶函数的一种应用,在这之前我们应该清楚什么是高阶函数,通俗的说,函数可以作为参数传递到函数中,这个作为参数的函数叫回调函数,而拥有这个参数的函数就是高阶函数,回调函数在高阶函数中调用并传递相应的参数,在高阶函数执行时,由于回调函数的内部逻辑不同,高阶函数的执行结果也不同,非常...

2018-10-12 00:14:28 351

原创 Canvas + WebSocket + Redis 实现一个视频弹幕

原文出自:https://www.pandashen.com页面布局首先,我们需要实现页面布局,在根目录创建 index.html 布局中我们需要有一个 video 多媒体标签引入我们的本地视频,添加输入弹幕的输入框、确认发送的按钮、颜色选择器、字体大小滑动条,创建一个 style.css 来调整页面布局的样式,这里我们顺便创建一个 index.js 文件用于后续实现我们的核心逻辑,先引...

2018-10-12 00:14:17 852

原创 异步发展流程 —— 异步编程的终极大招 async/await

原文出自:https://www.pandashen.com前言这篇文章是异步发展流程系列的最后一篇,可能会涉及 Promise、Generators、co 等前置知识,如果对这些不是很了解可以看这个系列的前三篇:异步发展流程 —— Promise 的基本使用异步发展流程 —— 手写一个符合 Promise/A+ 规范的 Promise异步发展流程 —— Generators +...

2018-10-12 00:13:59 160

原创 异步发展流程 —— Generators + co 让异步更优雅

原文出自:https://www.pandashen.comGenerators 简介Generator 函数是 ES6 提供的一种异步编程解决方案,是一个生成器,用于生成一个遍历器的函数,语法行为与传统函数完全不同。Iterator 遍历器JavaScript 原有的表示 “集合” 的数据结构,主要有 Array 和 Object,在 ES6 中又加入了 Set 和 Map,这样...

2018-10-12 00:13:48 210

原创 异步发展流程 —— 手写一个符合 Promise/A+ 规范的 Promise

原文出自:https://www.pandashen.com概述Promise 是 js 异步编程的一种解决方案,避免了 “回调地狱” 给编程带来的麻烦,在 ES6 中成为了标准,这篇文章重点不是叙述 Promise 的基本用法,而是从零开始,手写一版符合 Promise/A+ 规范的 Promise,如果想了解更多 Promise 的基本用法,可以看 异步发展流程 —— Promise...

2018-10-12 00:13:36 276

原创 异步发展流程 —— Promise 的基本使用

原文出自:https://www.pandashen.comPromise 简介Promise 是 ES6 的新特性,提供了对 js 异步编程控制的新的解决方案,在过去书写异步代码时要靠回调函数,当异步操作依赖于其他异步操作的返回值时,会出现一种现象,被程序员们称为 “回调地狱”,即多层回调函数嵌套,这种代码的可读性、维护性都很差,因此诞生了 Promise,当然 Promise 并不是...

2018-10-12 00:13:15 140

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除