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

2018-10-17
阅读 7 分钟
6.4k
Koa 是当下主流 NodeJS 框架,以轻量见长,而它中间件机制与相对传统的 Express 支持了异步,所以编码时经常使用 async/await,提高了可读性,使代码变得更优雅,上一篇文章 NodeJS 进阶 —— Koa 源码分析,也对 “洋葱模型” 和实现它的 compose 进行分析,由于个人觉得 compose 的编程思想比较重要,应用广泛,所以本篇借...

NodeJS 进阶 —— Koa 源码分析

2018-10-17
阅读 19 分钟
1.9k
Koa 2.x 版本是当下最流行的 NodeJS 框架,同时社区涌现出一大批围绕 Koa 2.x 的中间件以及基于 Koa 2.x 封装的企业级框架,如 egg.js,然而 Koa 本身的代码却非常精简,精简到所有文件的代码去掉注释后还不足 2000 行,本篇就围绕着这 2000 行不到的代码抽出核心逻辑进行分析,并压缩成一版只有 200 行不到的简易版 Koa。

Express 中间件 body-parser 原理分析

2018-10-17
阅读 4 分钟
7.5k
Express 是基于 NodeJS 平台的 Web 框架,应用广泛,在 Express 社区中有着大量的开发者通过 Express 中间件的特性,开发了各种功能的中间件,用来处理某些响应以及给请求对象 req、响应对象 res 添加属性或方法,我们接下来就通过分析常用的 body-parser 中间件的原理来了解如何开发 Express 中间件,如果想了解更多 Ex...

Express 源码分析及简易封装

2018-10-17
阅读 44 分钟
2.9k
Express 是 NodeJS 的 Web 框架,与 Koa 的轻量相比,功能要更多一些,依然是当前使用最广泛的 NodeJS 框架,本篇参考 Express 的核心逻辑来实现一个简易版,Express 源码较多,逻辑复杂,看一周可能也看不完,如果你已经使用过 Express,又想快速的了解 Express 常用功能的原理,那读这篇文章是一个好的选择,也可以为...

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

2018-10-17
阅读 12 分钟
5.5k
Koa 2.x 版本是当下最流行的 NodeJS 框架,Koa 2.0 的源码特别精简,不像 Express 封装的功能那么多,所以大部分的功能都是由 Koa 开发团队(同 Express 是一家出品)和社区贡献者针对 Koa 对 NodeJS 的封装特性实现的中间件来提供的,用法非常简单,就是引入中间件,并调用 Koa 的 use 方法使用在对应的位置,这样就可...

NodeJS 使用 cookie 和 session

2018-10-17
阅读 6 分钟
12.7k
由于浏览器无状态的特性,cookie 技术应运而生,cookie 是一个会话级的存储,大小 4KB 左右,用于浏览器将服务器设置的信息重新带给服务器进行验证,不支持跨域,在浏览器清空缓存或超过有效期后失效,不能存放敏感信息,session 是专门用于存储最初设置给浏览器 cookie 数据的地方,我们本篇就来讨论一下 cookie 和 ses...

通过一个案例理解 JWT

2018-10-17
阅读 12 分钟
5.4k
JWT(json web token)是为了在网络应用环境之间传递声明而基于 json 的开放标准,JWT 的声明一般被采用在身份提供者和服务器提供者间传递被认证的身份信息,以便于从资源服务器获取资源。

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

2018-10-17
阅读 5 分钟
9k
这是关于 MySQL 系列文章的第三篇,在前两篇文章 《MySQL —— 数据库基础》 和 《MySQL —— SQL 语句总结》 中,主要介绍了一些数据库的基础概念、创建表的方式以及 SQL 语句的使用,本篇在使用的基础上做一个小小的升华,来简单聊一聊数据库的设计,还有一句话不得不再次赘述,数据库博大精深,本系列文章内容较浅,适合...

MySQL —— 数据库基础

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

Webpack 核心模块 tapable 解析

2018-10-16
阅读 15 分钟
3.3k
Webpack 是一个现代 JavaScript 应用程序的静态模块打包器,是对前端项目实现自动化和优化必不可少的工具,Webpack 的 loader(加载器)和 plugin(插件)是由 Webpack 开发者和社区开发者共同贡献的,而目前又没有比较系统的开发文档,想写加载器和插件必须要懂 Webpack 的原理,即看懂 Webpack 的源码,tapable 则是 W...

NodeJS 多进程和集群

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

Webpack —— tree-starking 解析

2018-10-16
阅读 7 分钟
4.3k
tree-sharking 是 Webpack 2 后续版本的优化功能,顾名思义,就是将多余的代码给 “摇晃” 掉,在开发中我们经常使用一些第三方库,而这些第三方库只使用了这个库的一部门功能或代码,未使用的代码也要被打包进来,这样出口文件会非常大,tree-sharking 帮我们解决了这个问题,它可以将各个模块中没有使用的方法过滤掉,只...

AST 抽象语法树

2018-10-16
阅读 8 分钟
13.2k
AST(Abstract Syntax Tree)是源代码的抽象语法结构树状表现形式,Webpack、ESLint、JSX、TypeScript 的编译和模块化规则之间的转化都是通过 AST 来实现对代码的检查、分析以及编译等操作。

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

2018-10-16
阅读 16 分钟
5.5k
npm 里有个 http-server 的模块,是一个简单的、零配置的 HTTP 服务,它非常强大,同时非常简单,可以方便的帮助我们开启本地服务器,以及局域网共享,可以用来做测试,开发,学习时的环境配置,我们本节就模拟 http-server 实现一个自己的启动本地服务的命令行工具。

HTTP 缓存的那些事儿

2018-10-16
阅读 7 分钟
2.3k
HTTP 缓存机制作为 Web 应用性能优化的重要手段,对于从事 Web 开发的同学们来说,应该是知识体系的基础环节,也是想要成为前端架构的必备技能。

NodeJS 加密 —— crypto 模块

2018-10-16
阅读 6 分钟
20.5k
加密是以某种算法改变原有的信息数据,使得未授权用户即使获得了已加密信息,因不知解密的方法,无法得知信息真正的含义,通过这种方式提高网络数据传输的安全性,加密算法常见的有哈希算法、HMAC 算法、签名、对称性加密算法和非对称性加密算法,加密算法也分为可逆和不可逆,比如 md5 就是不可逆加密,只能暴力破解(...

NodeJS 服务器实现 gzip 压缩

2018-10-11
阅读 4 分钟
9.7k
在浏览器向服务器请求静态资源时,服务器为了减小在网络传输过程中消耗的流量和时间,都是将静态资源经过压缩后返回给服务器的,实现压缩的算法有 deflate 和 gzip 等,最常用的是 gzip 压缩。

NodeJS 实现多语言

2018-10-11
阅读 3 分钟
5.2k
我们平时访问一些文档类型的网站时,经常可以看到页面右上角有一个下拉框用来选择当前页面支持的语言,并在选中后将整个网页的内容切换为选中的语言,这就是项目中的多语言,多语言可以根据浏览器请求发送的语言类型在服务器进行设置,也可以在请求服务器时返回多种语言,并根据权重和浏览器的支持情况进行选择和渲染。

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

2018-10-11
阅读 5 分钟
4.7k
从浏览器向服务器提交数据时,常见有表单提交,JSON 字符串提交和普通字符串提交,不同情况需要附带不同的请求头信息,告诉服务器客户端可以直接解析的数据格式,如果发送的数据为 json 字符串,后两种类型都可以成功发送到服务器,只是加上请求头信息服务器更容易判断该以什么格式返回数据。

NodeJS 搭建 HTTP 服务器

2018-10-11
阅读 6 分钟
10.6k
在 NodeJS 中用来创建服务的模块是 http 核心模块,本篇就来介绍关于使用 http 模块搭建 HTTP 服务器和客户端的方法,以及模块的基本 API。

基于 TCP 实现简易聊天室

2018-10-11
阅读 7 分钟
4.8k
TCP 为传输层协议,在 NodeJS 中,基于 TCP 的核心模块为 net,http 和 https 模块都是基于 net 实现的,我们先简单介绍 net 的用法,再根据 net 实现一个简易的聊天室。

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

2018-10-11
阅读 4 分钟
2.5k
本文是对于 NodeJS 核心模块 fs 可读流 createReadeStream 的应用,实现 “行读取器”,功能为读取一个文档的内容,每读完一行触发一次监听的事件,并对这一行数据进行处理。

NodeJS —— 自定义流的实现

2018-10-11
阅读 4 分钟
5.5k
常见的自定义流有四种,Readable(可读流)、Writable(可写流)、Duplex(双工流)和 Transform(转换流),常见的自定义流应用有 HTTP 请求、响应,crypto 加密,进程 stdin 通信等等。

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

2018-10-11
阅读 20 分钟
2k
在之前的博客中已经了解了流的基本用法,这篇的重点在于根据可读流的用法对可读流的原理进行分析,实现简易版的 ReadStream,流的基本用法请看这里 NodeJS —— Stream 的基本使用。

NodeJS —— Stream 的基本使用

2018-10-11
阅读 7 分钟
4.9k
在 NodeJS 中,我们对文件的操作需要依赖核心模块 fs,fs 中有很基本 API 可以帮助我们读写占用内存较小的文件,如果是大文件或内存不确定也可以通过 open、read、write、close 等方法对文件进行操作,但是这样操作文件每一个步骤都要关心,非常繁琐,fs 中提供了可读流和可写流,让我们通过流来操作文件,方便我们对文...

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

2018-10-11
阅读 10 分钟
5k
树(Tree)是 n 个结点的有限集,n 为 0 时,称为空树,在任意一棵非空树中有且仅有一个特定的被称为根(Root)的结点,当 n 大于 1 时,其余结点可分为 m 个互不相交的有限集 T1、T2、......、Tm,其中每一个集合本身又是一棵树,并且称为 SubTree,即根的子树。

NodeJS —— Buffer 解读

2018-10-11
阅读 10 分钟
4.4k
在 ES6 引入 TypedArray 之前,JavaScript 语言没有读取或操作二进制数据流的机制。 Buffer 类被引入作为 NodeJS API 的一部分,使其可以在 TCP 流或文件系统操作等场景中处理二进制数据流。Buffer 属于 Global 对象,使用时不需引入,且 Buffer 的大小在创建时确定,无法调整。

EventEmitter 源码分析与简易实现

2018-10-11
阅读 8 分钟
5.3k
EventEmitter 是 NodeJS 的核心模块 events 中的类,用于对 NodeJS 中的事件进行统一管理,用 events 特定的 API 对事件进行添加、触发和移除等等,核心方法的模式类似于发布订阅。

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

2018-10-11
阅读 4 分钟
5.7k
本篇使用 NodeJS 的 HTTP 服务创建客户端,使用 Range 请求实现下载功能,并通过本篇的 Demo 扩展在业务中实现断点续传等功能的思路。

NodeJS 服务器实现资源防盗链

2018-10-11
阅读 4 分钟
4k
“盗链” 说白了就是利用别人网站的资源链接放在自己的站点,在未经允许的情况下去获取别人网站里面的图片或者视频等资源,导致资源所有者的网站的流量费用增加或收入减少,为了防止资源链接随意被人盗用的手段被称为 “防盗链”。