iTerm2 + OhMyZsh + agnoster 搭建
推荐链接:
https://www.jianshu.com/p/246b844f4449
iconMoon
iconMoon.md
https://www.cnblogs.com/chinabin1993/p/8185398.html
https://blog.csdn.net/web_harry/article/details/70310597
https://blog.csdn.net/qq_37261367/article/details/80012320
01-Node.js介绍
title: 01-Node.js介绍publish: true
todo
rpc 和 Node.js 的关系
《吊打面试官》系列 Node.js 全栈秒杀系统
前言Node 的重要性已经不言而喻,很多互联网公司都已经有大量的高性能系统运行在 Node 之上。Node 凭借其单线程、异步等举措实现了极高的性能基准。此外,目前最为流行的 Web 开发模式是前后端分离的形式,即前端开发者与后端开发者在自己喜欢的 IDE 上独立进行开发,然后通过 HTTP 或是 RPC 等方式实现数据与流程的交互。这种开发模式在 Node 的强大功能的引领下变得越来越高效,也越来越受到各个互联网公司的青睐。
前端同学为什么要学习后端/后端同学为什么要学习前端
了解前后端交互流程。
前端同学能够和后台开发的程序员更佳紧密地结合、更顺畅地沟通。
当网站的业务逻辑需要前置时,前端人员需要学习一些后台开发的技术,以完成相应的任务;;反过来也一样。
拓宽知识视野和技术栈,能够站在全局的角度审视整个项目。
前端同学为什么要学 Node.js1、Node.js 使用 JavaS ...
02-Node.js的特点
title: 02-Node.js的特点publish: true
Node.js 的特点
异步、非阻塞 IO 模型
事件循环
单线程
总结:轻量和高效
Node.js 的性能和效率非常高。
传统的 Java 语言是一个请求开启一个线程,当请求处理完毕后就关闭这个线程。而 Node.js 则完全没有采用这种模型,它本质上就是一个单线程。
你可能会疑问:一个线程如何服务于大量的请求、如何处理高并发的呢?这是因为,Node.js 采用的是异步的、非阻塞的模型。
这里所谓的“单线程”,指的是 Node 的主线程只有一个。为了确保主线程不被阻塞,主线程是用于接收客户端请求。但不会处理具体的任务。而 Node 的背后还有一个线程池,线程池会处理长时间运行的任务(比如 IO 操作、网络操作)。线程池里的任务是通过队列和事件循环的机制来执行。
使用 Node.js 时的劣势
程序运行不稳定,可能会出现服务不可用的情况
程序运行效率较低,每秒的请求数维持在一个较低的水平
前端同学对服务器端的技术不太熟悉。
03-Node.js开发环境安装
title: 03-Node.js开发环境安装publish: true
Node.js 运行环境配置:通过 Node.js 安装包(不推荐)去 Node.js 的官网下载安装包:
我们也可以在https://nodejs.org/en/download/releases/ 里下载历史版本。
注意,我们以一定要用偶数版(V4、V6 等),不要用奇数版(比如 V5),因为奇数版不稳定。
后续如果需要安装其他版本,可以这样做:重新下载最新的安装包,覆盖安装即可。
但我们并不推荐直接采用 Node.js.msi(windows)或者 Node.js.pkg(Mac) 安装包进行安装,因为会产生如下问题。
通过 Node.js 安装包产生的问题:
安装新版本时,需要覆盖就版本;而且以前版本安装的很多全局工具包,需要重新安装。
无法回滚到之前的旧版本。
无法在多个版本之间切换(很多时候,不同的项目需要使用特定版本。或者,我想临时尝鲜一下新版本的特性)
因此,我们暂时先不用安装 Node.js,稍后用 NVM 的方式来安装 Node.js。通过 NVM 的方式,可以让 ...
04-Node.js模块化规范:CommonJS
title: 04-Node.js模块化规范:CommonJSpublish: true
前言网站越来越复杂,js代码、js文件也越来越多,会遇到一些问题:
文件依赖
全局污染、命名冲突
程序模块化包括:
日期模块
数学计算模块
日志模块
登陆认证模块
报表展示模块等。
所有这些模块共同组成了程序软件系统。
一次编写,多次使用,才是提高效率的核心。
模块化的理解什么是模块化概念:将一个复杂的程序依据一定的规则(规范)封装成几个块(文件),并组合在一起。
模块的内部数据、实现是私有的, 只是向外部暴露一些接口(方法)与外部其它模块通信。
最早的时候,我们会把所有的代码都写在一个js文件里,那么,耦合性会很高(关联性强),不利于维护;而且会造成全局污染,很容易命名冲突。
模块化的好处
避免命名冲突,减少命名空间污染
降低耦合性;更好地分离、按需加载
高复用性:代码方便重用,别人开发的模块直接拿过来就可以使用,不需要重复开发类似的功能。
高可维护性:软件的声明周期中最长的阶段其实并不是开发阶段,而是维护阶段,需求变更比较频繁。使用模块化的开发,方式更容易维护。 ...
05-Node.js内置模块:fs文件模块
title: 05-Node.js内置模块:fs文件模块publish: true
Node.js 的官方API文档
Node.js 的API文档(英文): https://nodejs.org/docs/latest-v8.x/api/index.html
Node.js 的API文档(中文):http://nodejs.cn/api/
关于 Node.js 的内置模块和常见API,可以看官方文档。
查阅文档时,稳定指数如下:
红色:废弃。
橙色:实验。表示当前版本可用,其他版本不确定。也许不向下兼容,建议不要在生产环境中使用该特性。
绿色:稳定。与 npm 生态系统的兼容性是最高的优先级。
Node.js 中模块的分类Node.js 应用由模块组成,采用 CommonJS 模块规范。Node.js中的模块分为三种:
内置模块
第三方模块
自定义模块
下面简单介绍一下。
1、内置模块const process = require('process');const path = require('path');con ...
06-Node.js内置模块:path路径模块
title: 06-Node.js内置模块:path路径模块publish: true
path 路径模块Node.js 通过path这个内置模块,提供了一些路径操作的API,具体可以参考官方的api文档。这里列举一些常用的API。
path.extname() 获取文件/路径的扩展名语法格式:
path.extname(myPath);
代码解释:
获取 myPath 这个文件或者路径的扩展名。
myPath 这个参数要求是字符串。如果 myPath 不是字符串,则抛出 TypeError。
代码举例:
const path = require('path');path.extname('hello.txt'); // 返回 '.txt'path.extname('www.qianguyihao.com'); // 返回 '.com'path.extname('index.coffee.md'); // 返回 '.md'path. ...
07-Node.js操作MySQL数据库
title: 07-Node.js操作MySQL数据库publish: true
Node.js 连接 MySQL(1)安装 mysql 包:
$ npm install mysql
(2)引入 mysql 包:
const mysql = require("mysql");
(3)建立连接:
let mysql = require("mysql");let options = { host: "localhost", //port:"3306", //可选,默认3306 user: "root", password: 'xxx', // 这里改成你自己的数据库连接密码 database: "qiangu_database",};//创建与数据库进行连接的连接对象let connection = mysql.createConnection(options);//建立连接connection.connect(( ...
CommonJS
title: 01-数据库的基础知识publish: false
全局对象global类似于客户端 JavaScript 运行环境中的 window。
process用于获取当前的 Node 进程信息,一般用于获取环境变量之类的信息。
consoleNode 中内置的 console 模块,提供操作控制台的输入输出功能,常见使用方式与客户端类似。
全局函数
setInterval(callback, millisecond)
clearInterval(timer)
setTimeout(callback, millisecond)
clearTimeout(timer)
Buffer:Class
用于操作二进制数据
以后介绍
Node 调试最简单的调试最方便也是最简单的调试:console.log()
Node 原生的调试网址:https://nodejs.org/api/debugger.html
第三方模块提供的调试工具$ npm install node-inspector –g //方式一$ npm install devtool -g ...
ES6
title: 01-数据库的基础知识publish: false
前言ECMAScript 是 JS 的语言标准。而 ES6 是新的 JS 语法标准。
发展历史20180303_1633.png
2015年6月,ES6正式发布。
ES6 的其他优势
使用 babel 语法转换器,支持低端浏览器
流行的库基本都是基于 ES6 构建。 React 默认使用 ES6 新源发开发。
ES6 的常用语法ES6语法概览
块级作用域、字符串
对象扩展、解构
类、模块化等。
作用域:let 和 const
用 let定义变量 ,替代 var
用const 定义常量(定义后,不可修改)
作用域和 {}
举例:
let a1 = 'haha';const name = `smyhvae`;
模板字符串我们以前让字符串进行拼接的时候,是这样做的:(传统写法的字符串拼接)
var name = 'smyhvae';var age = '26';console.log('name:'+name+ ...
JavaScript模块化:AMD
title: JavaScript模块化:AMDpublish: true
AMD的基本语法AMD的概念AMD(Asynchronous Module Definition):异步模块定义。AMD专门用于浏览器端,模块的加载是异步的。
AMD规范:是 RequireJS 在推广过程中对模块化定义的规范化产出。
RequireJS:一个基于AMD规范实现的模块化开发解决方案。
暴露模块的方式定义没有依赖的模块:(参数只有一个 function)
define(function () { return 模块})
定义有依赖的模块:(参数有两个:模块名、function)
//定义有依赖的模块:第一个参数为数组define(['module1', 'module2'], function (m1, m2) { return 模块})
代码解释:
第一个参数必须是数组,里面存放的是,需要依赖的其他的模块。
第二个参数是function,里面带了形参 m1 和 m2,分别代表了 module ...
JavaScript模块化:CMD
title: JavaScript模块化:CMDpublish: true
CMD的基本语法CMD的概念CMD(Common Module Definition):同步模块定义。CMD专门用于浏览器端,模块的加载是同步的。模块在使用时才会加载执行。
CMD规范:是 SeaJS 在推广过程中对模块化定义的规范化产出。
SeaJSSeaJS:一个基于CMD规范实现的模块化开发解决方案。
官网链接:
http://seajs.org/
https://github.com/seajs/seajs
推荐学习链接:
http://www.zhangxinxu.com/sp/seajs/
http://es6.ruanyifeng.com/#docs/module
暴露模块的方式
不管是定义没有依赖的模块,还是定义有依赖的模块,参数只有一个,那就是 function。
定义没有依赖的模块:
define(function (require, exports, module) { exports.xxx = value //暴露模块 module.e ...
JavaScript模块化:ES6
title: JavaScript模块化:ES6publish: true
模块化开发的引入JS开发的弊端JS 在使用时存在两大问题,而 Node.js 可以很好地避免这两个问题:
文件依赖。比如 a 文件依赖 b 文件,b 文件依赖 c 文件。而 Node.js 中的文件依赖,不需要人工维护和人为分析。
命名冲突。js 的各个文件是相互开放的,容易导致命名冲突。而 Node.js 是属于半封闭的状态,可以指定哪些内容是开放的,哪些内容是封闭的。
Node.js 在解决这两个问题时,用到的就是模块化开发。
软件开发中的模块化开发一个功能就是一个模块,多个模块可以组成完整的应用,抽离一个模块不会影响其他功能的运行。
效果如下:
Node.js 中的模块化开发Node.js 规定,一个 JS 文件就是一个模块,模块内部定义的变量和函数默认情况下在外部无法访问。
模块内部可以使用 exports 对象进行成员导出, 使用 require 方法导入其他模块。效果如下:
ES6模块化的基本语法ES6模块化的说明依赖模块需要编译打包处理。原因如下:
(1)有些浏览器不支持 ES6 ...
KOA2
title: 01-数据库的基础知识publish: false
KOA2 简介KOA已经发展到了第二个版本,简称 KOA2。突出的特点是插件和中间件,