nodejs入门

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。
1、安装nvm(Node Version Manager)是一个用来管理node版本的工具。


REPL(Read,Eval,print,loop)环境。全局安装完成后在任一个环境中执行命令。
接受用户输入-执行用户输入-打印执行结果到控制台-循环到下一次。
REPL就是在cmd或者powershell中输入命令行node后就是进入REPL环境,可以运行nodejs代码了。

VSCode编辑器:
https://code.visualstudio.com/docs/?dv=win

全局对象:
global和process接受参数

异步回调函数:
异步操作:不知道用户什么时候操作。
线程阻塞:setTimeout函数,产生依赖问题,如果去请求文件阻塞,下面要使用该文件。
常见解决方式是使用异步的API:采用回调函数解决。
回调函数在最后一个参数使用callback。
调用回调函数时,第一个参数是err。

非阻塞异步:
什么是异步?打电话是同步,发短信是异步。
Node所有的会发生阻塞的操作都是异步。
阻塞I/O:比如cmd命令中等待input输入和打印。
非阻塞I/O:

day02:
异步操作:
Node采用Chrome V8引擎处理js脚本,V8最大特点是单线程运行,一次只能运行一个任务。
Node肯定有阻塞,比如读写,耗费时间。Node采用回调的方式,任务不是马上执行,而是插在任务队列的尾部,等前面的任务运行完成后再执行。

进程和线程
进程包含线程。
一个exe程序就是一个进程,不如qq,node,feiq.exe。一个进程中可以有多个线程。是否线程越多越好?
线程缺点:创建线程比较麻烦;cpu只有一个,实际是cpu在快速切换。

非阻塞I/O:
常量const恒定不变的量。
let用于定义局部变量,在局部作用域中。
用let和const替代var,是ES6语法。

事件驱动:
Node事件队列。
事件队列中的阻塞操作是交给内部的线程池去完成。
Node自身在内部维护多线程。
Node本身主线程主要就是不断的往返调度。

Web中的单线程。
Web中的不同的几个请求都是在Node服务器中的一个线程响应,不像其他语言,开几个线程。

模块化的开始
Node采用模块化结构是按照CommonJS规范。
模块与文件是一一对应的关系,即加载一个模块,实际就是加载一个文件。
自定义一个模块并调用。

模块分类:文件模块;核心模块(node自带的);第三方模块;
模块中自带的全局变量。
__dirname获取当前模块完整目录。
__filename获取当前文件完整路径。
module模块对象,主要用于导出成员。
exports映射到module.export的别名,可不用管。
模块中自定义变量的都是局部变量,自身是一个封闭的作用于,最后将方法导出即可。

require介绍
require自己写一套。
require不仅仅可以加载js文件,也可以加载json文件。
require载入路径的几种优先级和使用方式。

require如果不以./或/开头,则去找核心模块。

模块的缓存(删除和实现缓存机制)。
第一次加载模块时,会将该模块缓存起来,下次再使用时,直接用减少读写,提高速度。
require.cache可以看缓存。
如果写一个模块内容经常变,不想让require缓存自己写的模块,可以通过require.cache删除掉该缓存对象(不推荐);也可以通过暴露方法的方式module.exports=方法(推荐)。

第三天
文件操作,文件流,buffer。
如何看API文档。
核心模块介绍:
path:处理路径操作。
fs:操作系统文件。
child_process:新建子进程。
util:提供一系列实用小工具。
http:提供http服务器功能。
url:提供解析url。
querystring:解析url中的查询字符串。
crypto:提供加密解密功能。

NPM:Node包管理
https://www.npmjs.com/
包的加载机制:require
先在系统核心中加载(优先级最高,所以尽量包起名注意不要冲突),再到项目node_modules目录中找。
npm不需要单独安装,在安装node时,默认安装过了。
node附带的npm不是最新版本,最好用命令更新到最新版本:
npm install npm -g

npm config ls
npm config set prefix 路径。
npm config get prefix
NRM
常用NPM命令。

文件系统操作:
fs、path、readline、fs-extra
path的使用详解。

同步或异步调用。
readfile()和readfilesync();

Buffer缓冲区:
除utf-8文字外,其他文件buffer。缓冲区可以方便操作二进制,大文件读取需要使用buffer操作。

文件编码:
第三方iconv-lite

原文地址:https://www.cnblogs.com/ouousan/p/12315792.html