Node 基础简介
介绍
Node.js 不是一种新语言而是一个平台,为 JavaScript 提供了浏览器之外的运行时环境。它提供了丰富的内置模块,包括 File System 模块、Net 模块、HTTP 模块、URL 模块、Process 模块等等。这些模块能够让 JavaScript 操作我们的计算机,建立 Web 服务器。
node 环境下的相关操作 - 具体可参考 REPL 模块
首先,不带参数,直接执行 node
命令,可以开启 REPL
.help - 列出使用命令
.break - 退出多行表达式
.clear – 1、退出多行表达式 2、清除REPL运行环境的上下文对象中保存的所有变量和函数
.exit – 退出REPL运行环境
.save filename - 保存当前的 Node REPL 会话到指定文件
.load filename - 载入当前 Node REPL 会话的文件内容
ctrl + c:.break
ctrl + c (两次):.exit
ctrl + d:.exit
向上/向下 键 - 查看输入的历史命令
tab 键 - 查看当前作用域下的所有可用的方法
REPL(交互式解释器)
R Read - 读取
E Eval - 运算
P Print - 打印输出
L Loop - 重复
在 REPL 运行环境中使用下划线字符(_
)来访问最近使用的表达式,但是不意味着可以改变变量的值
模块系统
模块化,就是指代码具有模块结构,**整个应用可以自顶向下划分为若干个模块,每个模块彼此独立,代码不会相互影响。**模块化的目的是使代码可以更好地复用,从而支持更大规模的应用开发。
作用:为了更好组织、管理代码,nodejs 引入了模块
定义:一个文件就是一个独立的模块
特点:每个模块都有自己的独立作用域 - 模块作用域
扩展:作用域
全局作用域
函数作用域
块级作用域(es2015+)
模块作用域
Node.js 核心模块
Node.js 内置的模块比较丰富,常用的主要是以下几个。
File System 模块:这是操作目录和文件的模块,提供文件和目录的读、写、创建、删除、权限设置等等。
Net 模块:提供网络套接字 socket,用来创建 TCP 连接,TCP 连接可以用来访问后台数据库和其他持久化服务。
HTTP 模块:提供创建 HTTP 连接的能力,可以用来创建 Web 服务,也是 Node.js 在前端最常用的核心模块。
URL 模块:用来处理客户端请求的 URL 信息的辅助模块,可以解析 URL 字符串。
Path 模块:用来处理文件路径信息的辅助模块,可以解析文件路径的字符串。
Process 模块:用来获取进程信息。
Buffer 模块:用来处理二进制数据。
Console 模块:控制台模块,同浏览器的 Console 模块,用来输出信息到控制台。
Crypto 加密解密模块:用来处理需要用户授权的服务。
Events 模块:用来监听和派发用户事件。
全局对象
全局对象 global,其最根本的作用是作为一个全局变量的宿主。 按照 ECMAScript 定义,满足以下条件的变量是全局变量:
在最外层定义的变量
全局对象的属性
隐式定义的变量(未定义直接赋值的变量)
在 Node.js 中你不可能在最外层定义变量,因为所有用户代码都是输入当前模块的,而模块本身不是最外层上下文。
process: 用于描述当前 Node.js 进程状态的对象,提供了一个与操作系统的简单接口。
process.argv process.argv 属性返回一个数组,这个数组包含了启动 Node.js 进程时的命令行参数。 第一个元素为 process.execPath。即 Node.js 进程的可执行文件所在的绝对路径 第二个元素为当前执行的 JavaScript 文件路径。 剩余的元素为其他命令行参数。
node index.js 1991 name=chenfangxu --v "lalla"
[ '/usr/local/Cellar/node/7.9.0/bin/node',
'/Users/cfangxu/project/demo/myNEapp/site/index.js',
'1991',
'name=chenfangxu',
'--v',
'lalla' ]
process.env:返回一个对象,成员为当前 Shell 的环境变量,比如 process.env.HOME 返回用户的主目录,process.env.PATH 环境变量 PATH
process.platform:返回一个字符串,表示当前的操作系统,比如 Linux。
process.version: Node 版本
方法
process.nextTick(callback) 为事件循环设置一项任务,Node.js 会在下次事件循环中调用 callback(具体的时间点是:在当前执行栈的尾部、下一次 Event Loop 之前执行)。因为一个 Node.js 进程只有一个线程,因此在任何时刻都只有一个事件在执行。如果这个事件占用了大量的 CPU 时间,执行事件循环中的下一个事件就需要等待很久,因此 Node.js 的一个编程原则就是尽量缩短每个事件的执行时间。process.nextTick()提供了一个这样的工具,可以把很复杂的工作拆散,编程一个个较小的事件。
process.chdir():切换工作目录到指定目录。
process.cwd():返回运行当前脚本的工作目录的路径。
process.exit([code]):退出当前进程。如果 code 未提供,此 exit 方法要么使用'success' 状态码 0,要么使用 process.exitCode 属性值,前提是此属性已被设置。 Node.js 在所有['exit']事件监听器都被调用了以后,才会终止进程。
console:用于提供控制台标准输出
console.log():向标准输出流打印字符并以换行符结束。
console.error():向标准错误流输出
console.trace(): 向标准错误流输出当前的调用栈
重点说一下字符串替换(浏览器和 Node.js 有些不一样)
在字符串中使用占位符,并且用传递给该方法的其他参数替换占位符,从而完成字符串的替换。
%s | 用字符串替换元素
%(d|i)| 用整数替换元素
%f | 用浮点数替换元素,使用%.1f 可以将浮点数格式化为小数点后只保留一位有效数字。也可以使用 %.nf 来指定小数点后保留 n 位数字。
%(o|O) | 元素作为一个对象来显示
%c | 应用提供的 CSS
console.assert(value[, message][, ...args]) 一个简单的断言测试,验证 value 是否为真。 如果不为真,则抛出 AssertionError。 如果提供了 message,则使用 util.format() 格式化并作为错误信息使用。注意:Node.js 中的 console.assert() 方法与在浏览器中的 console.assert() 方法的实现是不一样的。 具体地说,在浏览器中,用非真的断言调用 console.assert() 会导致 message 被打印到控制台但不会中断后续代码的执行。 而在 Node.js 中,非真的断言会导致抛出 AssertionError。
util 实用模块
提供常用函数的集合,用于弥补核心 JavaScript 的功能过于精简不足。
util.format(format[, ...args]) util.format() 方法返回一个格式化后的字符串,使用第一个参数作为一个类似 printf 的格式。 第一个参数是一个字符串,包含零个或多个占位符。 每个占位符会被对应参数转换后的值所替换。 支持的占位符有:
%s - 字符串。
%d - 数值(整数或浮点数)。
%i - 整数。
%f - 浮点数
%j - JSON。如果参数包含循环引用,则用字符串 '[Circular]' 替换。
%o - 一个对象的字符串,类似用 util.inspect() 并且 options { showHidden: true, depth: 4, showProxy: true }, 展示整个对象包括不可遍历的和 symbol 属性
%O - 一个对象的字符串 类似用 util.inspect() 并且 options 为空 展示整个对象不包括不可遍历的和 symbol 属性
%% - 单个百分号('%')。不消耗参数。
注意:
只有一个参数,不会格式化,而是直接返回字符串。
util.format('%% %s'); // '%% %s'
util.inspect(object[, options])
options
showHidden 如果为 true,则 object 的不可枚举的符号与属性也会被包括在格式化后的结果中。 默认为 false。
depth 指定格式化 object 时递归的次数。 这对查看大型复杂对象很有用。 默认为 2。 若要无限地递归则传入 null。
colors 如果为 true,则输出样式使用 ANSI 颜色代码。 默认为 false。 颜色可自定义。
customInspect 如果为 false,则 object 上自定义的 inspect(depth, opts) 函数不会被调用。 默认为 true。
showProxy 如果为 true,则 Proxy 对象的对象和函数会展示它们的 target 和 handler 对象。 默认为 false。
maxArrayLength 指定格式化时数组和 TypedArray 元素能包含的最大数量。 默认为 100。 设为 null 则显示全部数组元素。 设为 0 或负数则不显式数组元素。
breakLength 一个对象的键被拆分成多行的长度。 设为 Infinity 则格式化一个对象为单行。 默认为 60。
文件系统 fs
fs 模块是文件操作的封装,它提供了文件的读取、写入、更名、删除、遍历目录、链接等 POSIX 文件系统的操作。 与其他模块不同,fs 模块中大部分的操作都提供了异步的和同步的两个版本。
注意: Node.js 的异步编程接口习惯是以函数的最后一个参数为回调函数,通常一个函数只有一个回调函数。回调函数的实际参数中第一个是 err,其余的参数是其他返回的内容。如果没有发生错误,err 的值会是 null 或 undefined,如果有错误发生,err 通常是 Error 对象的实例。
注意: 与同步 I/O 函数不同,Node.js 中的异步函数大多没有返回值。
fs.open 方法中有参数 mode,用于创建文件时给文件指定权限,默认为 0o666。回调函数将会传递一个文件描述符 fd。文件权限: 是 POSIX 操作系统中对文件读取和访问权限的规范,通常用一个八进制数来表示。例如 0o754 表示文件所有者的权限是 7(读、写、执行),同组的用户权限是 5(读,执行),其他用户的权限是 4(读),写成字符表示就是 -rwxr-xr--。文件描述符: 是一个非负整数,表示操作系统内核为当前进程所维护的打开文件的记录表索引。
服务端开发需要懂的图
时序图
层级结构图
module
Last updated
Was this helpful?