Nodejs

process

process 对象是一个 global (全局变量),提供有关信息,控制当前 Node.js 进程。作为一个对象,它对于 Node.js 应用程序始终是可用的,故无需使用 require()

 process.env   属性返回一个包含用户环境信息的对象

export 和 module.export 的区别

在 node 的 js 模块里可以直接调用 exports 和 module 两个“全局”变量,但是 exports 是 module.exports 的一个引用

exports = module.exports = {};

    exports 是 module.exports 的一个引用

    module.exports 初始值为一个空对象 {},所以 exports 初始值也是 {}

    require 引用模块后,返回的是 module.exports 而不是 exports!!!!!

    exports.xxx 相当于在导出对象上挂属性,该属性对调用模块直接可见

    exports = 相当于给 exports 对象重新赋值,调用模块不能访问 exports 对象及其属性

    如果此模块是一个类,就应该直接赋值 module.exports,这样调用者就是一个类构造器,可以直接 new 实例

参考【https://www.jianshu.com/p/e452203d56c4】

REPL环境

REPL(Read-eval-print-loop):交互式解析器

 进入node,即进入了REPL环境,在命令窗口输入node


Nodejs_第1张图片
node命令行

在REPL环境下,可以定义和运行变量、函数、对象

POSIX标准

POSIX,全称为可移植性操作系统接口,是一种关于信息技术的IEEE标准。它包括了系统应用程序接口(简称API),以及实时扩展[C语言]

参考【https://www.cnblogs.com/1130136248wlxk/articles/5308863.html】

nodejs回调函数

Node.js 异步编程的直接体现就是回调  执行异步操作的函数将回调函数作为最后一个参数 

回调函数接收错误对象作为第一个参数

Nodejs_第2张图片

我们不需要等待文件读取完,就可以在读取文件时同时执行接下来的代码,大大提高了程序的性能


阻塞和非阻塞

1.阻塞:就像单线程cpu一样,一个任务由多个小任务组成,而且只能一个任务接一个任务流程的往下走,谁靠前谁先执行,执行完了进行下一个,如果遇到错误,下面的小任务就不能做了,一直卡住。

2.非阻塞:就像多线程cpu一样,一个任务由多个小任务组成,可以分开线程来做,每个线程做分配到的任务,完成了对应的任务就行,某个线程的任务没做完那就做报对应的错,其他的不受影响

stream (流)

流(stream)在 Node.js 中是处理流数据的抽象接口(abstract interface)。 stream 模块提供了基础的 API 。使用这些 API 可以很容易地来构建实现流接口的对象。

Node.js 提供了多种流对象。 例如, http请求 和process.stdout 就都是流的实例。

流可以是可读的、可写的,或是可读写的。所有的流都是 EventEmitter的实例。

stream 模块可以通过以下方式引入:

const stream = require('stream');

events (事件)

大多数 Node.js 核心 API 都采用惯用的异步事件驱动架构,其中某些类型的对象(触发器)会周期性地触发命名事件来调用函数对象(监听器)

所有能触发事件的对象都是 EventEmitter 类的实例。 这些对象开放了一个 eventEmitter.on() 函数,允许将一个或多个函数绑定到会被对象触发的命名事件上

当 EventEmitter 对象触发一个事件时,所有绑定在该事件上的函数都被同步地调用。 监听器的返回值会被丢弃


Nodejs_第3张图片
一个绑定了监听器的 EventEmitter 实例

eventEmitter.on() 方法用于注册监听器

eventEmitter.once() 方法为指定事件注册一个单次监听器

eventEmitter.emit(event,callback) 方法用于触发事件

eventEmitter.removeListener(event,callback)     移除指定事件的某个监听器  

Nodejs_第4张图片
详细用法

你可能感兴趣的:(Nodejs)