Arlo
Arlo
## 前言 在闲暇之余,我们经常会逛各种社区,逛掘金看技术软文,逛虎扑看今日赛事,逛头条看热门时事,逛 91…… 每个社区都有各种各样的资讯,但有时我们只想看某个社区的某些资讯。那我们能不能将这些社区里我们想要的信息做一下整合 定制成自己的“今日头条”呢? 思路 每天定时抓取 资讯的标题和链接 整合后发布到自己的网站 这样每天只要打开自己的网站就可以看到属于自己的今日头条啦~ - 抓取资讯 puppeteer - 定时任务 node-schedule - 部署 docker + github pages 我的今日头条 - 掘金社区 前端热门文章 - 今日头条 热门时事...
### 事件驱动 > Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 > Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。 > Allows you to build scalable network applications usingJavaScript on the server-side. 大多数 Node.js 核心...
## Koa 中间件 [Koa 生态](https://github.com/koajs)提供了各种各样的中间件供我们使用,可插可拔,非常灵活,开发者也可以根据自己的需求开发中间件。 Koa 本身只是实现了中间件流程控制,就能让我们在 Koa 中简单的使用中间件,那么它是怎么实现的呢? 本节我们先说说 Koa 的 use 方法做了什么,下一节我们将对 Koa 精妙的中间件流程控制作重点分析~ ```javascript const Emitter = require('events'); const http = require('http'); // 将Generator函数 转化为 使用co包装成的Promise对象 const...
了解了 Koa 的一些核心实现思想,我们最后来分析源码就会发现清晰很多,GO ~ ```javascript 'use strict'; /** * Module dependencies. */ const isGeneratorFunction = require('is-generator-function'); const response = require('./response'); const compose = require('koa-compose'); const isJSON = require('koa-is-json'); const context...
下面我们来看 Koa 的部分源码~ ```javascript 'use strict'; /** * Module dependencies. */ const util = require('util'); const only = require('only'); /** * Expose `Application` class. * Inherits from `Emitter.prototype`. */ class...
## Context 是什么? > Koa 提供一个 Context 对象,表示一次对话的上下文. > Koa Context 将 node 的 request 和 response 对象封装到单个对象中,为编写 Web 应用程序和 API 提供了许多有用的方法。 这些操作在 HTTP 服务器开发中频繁使用,它们被添加到此级别而不是更高级别的框架,这将强制中间件重新实现此通用功能。 context 对象主要是将上下文的访问器和方法直接委托给它们的 request 对象和 response...
**Node.js 提供了 http 模块,其中封装了一个高效的 http 服务器和一个简易的 http 客户端,主要是用于创建一个能够处理和响应 http 响应的服务** Koa 使用 http 模块的 createServer 方法创建 HTTP 服务器,并将 createServer 方法提供的两个参数,请求对象(req),响应对象(res),用来封装自己的 request 对象和 response 对象。 ```javascript const Emitter = require('events'); const...
## 目录 ```js 1. DNS 缓存 // 虽说跟标题关系不大,了解一下也不错 2. CDN 缓存 // 虽说跟标题关系不大,了解一下也不错 3. 浏览器缓存 // 本文将重点介绍并实践 ``` ## DNS 缓存 ### 什么是DNS 全称 Domain Name System ,即域名系统。 > 万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。DNS协议运行在UDP协议之上,使用端口号53。...
### new操作符做了什么?  - 创建一个新对象 - 新对象继承了构造函数的原型 - 构造函数的this指向新对象,并执行构造函数。 - 最后隐式的返回this,即新对象。 #### 如果我们在构造函数中进行显式返回,会发生什么?   > 由此我们可以得出结论:**构造函数如果返回基本类型,则会忽略,还是返回原来的this(新对象).如果返回的是引用类型,则会对该返回值进行处理,返回该返回值。** ### new操作符的模拟实现 **知道new操作符做了什么,我们要实现就不难了,直接上代码!** 
### 三兄弟的作用. > apply.call.bind 都是为了改变函数运行时上下文(this指向)而存在的。  ### 三兄弟的区别. - 三兄弟接收的第一个参数都是 要绑定的this指向. - apply的第二个参数是一个参数数组,call和bind的第二个及之后的参数作为函数实参按顺序传入。 - bind不会立即调用,其他两个会立即调用。  **接下来,我们来对三兄弟进行模拟实现** ### call的简易模拟实现(es6) #### 思路 - 函数定义在哪里 ? > call是可以被所有方法调用的,所以毫无疑问的定义在 Function的原型上! - 函数接收参数 ?...