
NodeJS
文章平均质量分 87
Panda Shen
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
基于 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 · 2362 阅读 · 0 评论 -
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 · 538 阅读 · 0 评论 -
Koa2 洋葱模型 —— compose 串联中间件的四种实现
原文出自:https://www.pandashen.com前言Koa 是当下主流 NodeJS 框架,以轻量见长,而它中间件机制与相对传统的 Express 支持了异步,所以编码时经常使用 async/await,提高了可读性,使代码变得更优雅,上一篇文章 NodeJS 进阶 —— Koa 源码分析,也对 “洋葱模型” 和实现它的 compose 进行分析,由于个人觉得 compose...原创 2018-10-23 01:40:23 · 2024 阅读 · 0 评论 -
CommonJS 模块化简易实现
原文出自:https://www.pandashen.comCommonJS 概述CommonJS 是一种模块化的标准,而 NodeJS 是这种标准的实现,每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。NodeJS 模块化的简易实现在实现模块加载之前,我们需要清除模块的加载过程:假设 A 文件夹下有一个 a.js,我们要...原创 2018-10-12 00:14:41 · 1452 阅读 · 0 评论 -
EventEmitter 源码分析与简易实现
原文出自:https://www.pandashen.comEventEmitter 简介EventEmitter 是 NodeJS 的核心模块 events 中的类,用于对 NodeJS 中的事件进行统一管理,用 events 特定的 API 对事件进行添加、触发和移除等等,核心方法的模式类似于发布订阅。实现 EventEmitter1、EventEmitter 构造函数的实现...原创 2018-10-12 00:14:53 · 1045 阅读 · 0 评论 -
NodeJS —— Buffer 解读
原文出自:https://www.pandashen.comBuffer 概述在 ES6 引入 TypedArray 之前,JavaScript 语言没有读取或操作二进制数据流的机制。 Buffer 类被引入作为 NodeJS API 的一部分,使其可以在 TCP 流或文件系统操作等场景中处理二进制数据流。Buffer 属于 Global 对象,使用时不需引入,且 Buffer 的大小...原创 2018-10-12 00:15:07 · 3007 阅读 · 0 评论 -
NodeJS 文件操作 —— fs 基本使用
原文出自:https://www.pandashen.comfs 概述在 NodeJS 中,所有与文件操作都是通过 fs 核心模块来实现的,包括文件目录的创建、删除、查询以及文件的读取和写入,在 fs 模块中,所有的方法都分为同步和异步两种实现,具有 sync 后缀的方法为同步方法,不具有 sync 后缀的方法为异步方法,在了解文件操作的方法之前有一些关于系统和文件的前置知识,如文件的权...原创 2018-10-12 00:15:23 · 27943 阅读 · 1 评论 -
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 · 993 阅读 · 0 评论 -
NodeJS —— Stream 的基本使用
原文出自:https://www.pandashen.com流的介绍在 NodeJS 中,我们对文件的操作需要依赖核心模块 fs,fs 中有很基本 API 可以帮助我们读写占用内存较小的文件,如果是大文件或内存不确定也可以通过 open、read、write、close 等方法对文件进行操作,但是这样操作文件每一个步骤都要关心,非常繁琐,fs 中提供了可读流和可写流,让我们通过流来操作文...原创 2018-10-16 22:38:14 · 313 阅读 · 0 评论 -
NodeJS —— 流的原理分析与简易实现
原文出自:https://www.pandashen.com前言在之前的博客中已经了解了流的基本用法,这篇的重点在于根据可读流的用法对可读流的原理进行分析,实现简易版的 ReadStream,流的基本用法请看这里 NodeJS —— Stream 的基本使用。可读流的实现(流动模式)1、ReadStream 类创建在使用 fs 的 createReadStream 创建可读流时,...原创 2018-10-16 22:38:32 · 725 阅读 · 0 评论 -
NodeJS —— 自定义流的实现
原文出自:https://www.pandashen.com概述常见的自定义流有四种,Readable(可读流)、Writable(可写流)、Duplex(双工流)和 Transform(转换流),常见的自定义流应用有 HTTP 请求、响应,crypto 加密,进程 stdin 通信等等。stream 模块介绍在 NodeJS 中要想实现自定义流,需要依赖模块 stream,直接引...原创 2018-10-16 22:38:49 · 603 阅读 · 0 评论 -
Express 中间件 body-parser 原理分析
原文出自:https://www.pandashen.com前言Express 是基于 NodeJS 平台的 Web 框架,应用广泛,在 Express 社区中有着大量的开发者通过 Express 中间件的特性,开发了各种功能的中间件,用来处理某些响应以及给请求对象 req、响应对象 res 添加属性或方法,我们接下来就通过分析常用的 body-parser 中间件的原理来了解如何开发 ...原创 2018-10-23 01:39:59 · 899 阅读 · 0 评论 -
Express 源码分析及简易封装
原文出自:https://www.pandashen.com前言Express 是 NodeJS 的 Web 框架,与 Koa 的轻量相比,功能要更多一些,依然是当前使用最广泛的 NodeJS 框架,本篇参考 Express 的核心逻辑来实现一个简易版,Express 源码较多,逻辑复杂,看一周可能也看不完,如果你已经使用过 Express,又想快速的了解 Express 常用功能的原理...原创 2018-10-23 01:39:50 · 1083 阅读 · 0 评论 -
Koa2 中间件原理解析 —— 看了就会写
原文出自:https://www.pandashen.com前言Koa 2.x 版本是当下最流行的 NodeJS 框架,Koa 2.0 的源码特别精简,不像 Express 封装的功能那么多,所以大部分的功能都是由 Koa 开发团队(同 Express 是一家出品)和社区贡献者针对 Koa 对 NodeJS 的封装特性实现的中间件来提供的,用法非常简单,就是引入中间件,并调用 Koa 的...原创 2018-10-23 01:39:39 · 1382 阅读 · 0 评论 -
NodeJS 搭建 HTTP 服务器
原文出自:https://www.pandashen.com前言在 NodeJS 中用来创建服务的模块是 http 核心模块,本篇就来介绍关于使用 http 模块搭建 HTTP 服务器和客户端的方法,以及模块的基本 API。HTTP 服务器1、创建 HTTP 服务器在 NodeJS 中,创建 HTTP 服务器可以与 net 模块创建 TCP 服务器对比,创建服务器有也两种方式。...原创 2018-10-16 22:39:58 · 1232 阅读 · 0 评论 -
NodeJS 使用 Range 请求实现下载功能
原文出自:https://www.pandashen.com前言本篇使用 NodeJS 的 HTTP 服务创建客户端,使用 Range 请求实现下载功能,并通过本篇的 Demo 扩展在业务中实现断点续传等功能的思路。服务端的实现我们通过 http 模块创建服务器处理 Range 请求,在服务器代码中我们为了减少回调嵌套使用 async 函数,所以需要将异步的操作方法转换成 Prom...原创 2018-10-16 22:40:15 · 2475 阅读 · 0 评论 -
NodeJS 服务器实现资源防盗链
原文出自:https://www.pandashen.com什么是 “盗链”?“盗链” 说白了就是利用别人网站的资源链接放在自己的站点,在未经允许的情况下去获取别人网站里面的图片或者视频等资源,导致资源所有者的网站的流量费用增加或收入减少,为了防止资源链接随意被人盗用的手段被称为 “防盗链”。模拟 “盗链” 场景我们先来模拟一下 “盗链” 场景,在本地启动服务运行 hotlinki...原创 2018-10-16 22:40:45 · 940 阅读 · 0 评论 -
NodeJS 服务器数据处理(表单、json 字符串和普通字符串)
原文出自:https://www.pandashen.com前言从浏览器向服务器提交数据时,常见有表单提交,JSON 字符串提交和普通字符串提交,不同情况需要附带不同的请求头信息,告诉服务器客户端可以直接解析的数据格式,如果发送的数据为 json 字符串,后两种类型都可以成功发送到服务器,只是加上请求头信息服务器更容易判断该以什么格式返回数据。querystring 模块解析请求体...原创 2018-10-17 00:02:40 · 1334 阅读 · 0 评论 -
NodeJS 实现多语言
什么是多语言?原文出自:https://www.pandashen.com我们平时访问一些文档类型的网站时,经常可以看到页面右上角有一个下拉框用来选择当前页面支持的语言,并在选中后将整个网页的内容切换为选中的语言,这就是项目中的多语言,多语言可以根据浏览器请求发送的语言类型在服务器进行设置,也可以在请求服务器时返回多种语言,并根据权重和浏览器的支持情况进行选择和渲染。功能描述在本文...原创 2018-10-17 00:02:52 · 2770 阅读 · 0 评论 -
NodeJS 服务器实现 gzip 压缩
原文出自:https://www.pandashen.com概述在浏览器向服务器请求静态资源时,服务器为了减小在网络传输过程中消耗的流量和时间,都是将静态资源经过压缩后返回给服务器的,实现压缩的算法有 deflate 和 gzip 等,最常用的是 gzip 压缩。gzip 简介在浏览器和服务器之间通过 gzip 压缩流实现传输的过程可以用下图表示。当浏览器向服务器请求静态资源,...原创 2018-10-17 00:03:04 · 8379 阅读 · 2 评论 -
NodeJS 加密 —— crypto 模块
原文出自:https://www.pandashen.com加密简介加密是以某种算法改变原有的信息数据,使得未授权用户即使获得了已加密信息,因不知解密的方法,无法得知信息真正的含义,通过这种方式提高网络数据传输的安全性,加密算法常见的有哈希算法、HMAC 算法、签名、对称性加密算法和非对称性加密算法,加密算法也分为可逆和不可逆,比如 md5 就是不可逆加密,只能暴力破解(撞库),我们在 ...原创 2018-10-17 00:03:17 · 886 阅读 · 0 评论 -
命令行工具 —— 手写类似 http-server 的静态服务器
原文出自:https://www.pandashen.com前言npm 里有个 http-server 的模块,是一个简单的、零配置的 HTTP 服务,它非常强大,同时非常简单,可以方便的帮助我们开启本地服务器,以及局域网共享,可以用来做测试,开发,学习时的环境配置,我们本节就模拟 http-server 实现一个自己的启动本地服务的命令行工具。http-server 使用http...原创 2018-10-17 00:03:42 · 536 阅读 · 0 评论 -
NodeJS 多进程和集群
原文出自:https://www.pandashen.com进程和线程“进程” 是计算机系统进行资源分配和调度的基本单位,我们可以理解为计算机每开启一个任务就会创建至少一个进程来处理,有时会创建多个,如 Chrome 浏览器的选项卡,其目的是为了防止一个进程挂掉而应用停止工作,而 “线程” 是程序执行流的最小单元,NodeJS 默认是单进程、单线程的,我们将这个进程称为主进程,也可以通过...原创 2018-10-17 00:04:17 · 618 阅读 · 0 评论 -
NodeJS 使用 cookie 和 session
原文出自:https://www.pandashen.com前言由于浏览器无状态的特性,cookie 技术应运而生,cookie 是一个会话级的存储,大小 4KB 左右,用于浏览器将服务器设置的信息重新带给服务器进行验证,不支持跨域,在浏览器清空缓存或超过有效期后失效,不能存放敏感信息,session 是专门用于存储最初设置给浏览器 cookie 数据的地方,我们本篇就来讨论一下 coo...原创 2018-10-23 01:39:24 · 978 阅读 · 0 评论 -
使用 NodeJS 可读流实现 “行读取器”
原文出自:https://www.pandashen.com前言本文是对于 NodeJS 核心模块 fs 可读流 createReadeStream 的应用,实现 “行读取器”,功能为读取一个文档的内容,每读完一行触发一次监听的事件,并对这一行数据进行处理。LineReader 类的创建实现 “行读取器” 的整体思路是创建一个类的实例,然后在这个实例上监听一个事件,并开始读取文件,...原创 2018-10-16 22:39:04 · 647 阅读 · 0 评论