NodeJs学习笔记(一)

我是跟着廖雪峰学习Nodejs

第一个node程序

由于Node.js平台是在后端运行JavaScript代码,所以,必须首先在本机安装Node环境。

命令行模式:

NodeJs学习笔记(一)_第1张图片

Node交互模式:

使用严格模式:

1.后缀为.js的文件,就可以用node命令直接运行这个程序了。
2.Node的交互模式和直接运行.js文件区别 直接输入node进入交互模式,相当于启动了Node解释器,但是等待你一行一行地输入源代码,每输入一行就执行一行。
直接运行node hello.js文件相当于启动了Node解释器,然后一次性把hello.js文件的源代码给执行了,你是没有机会以交互的方式输入源代码的。

标题搭建Node开发环境

1.使用vscode

2.使用模块化

不同的js文件可以是不同的模块 可以在其他界面引用该模块(记得require要写相对目录);
这种模块加载机制被称为CommonJS规范。

不同模块的内部各自使用的变量名和函数名都互不冲突。
module.exports = variable; //输出变量可为数组对象函数等
var foo = require(‘other_module’);//引用模块输出对象

基本模块

1.全局

JavaScript有且仅有一个全局对象,在浏览器中,叫window对象。而在Node.js环境中,也有唯一的全局对象,但不叫window,而叫global,这个对象的属性和方法也和浏览器环境的window不同。
在交互式模式中输入global.conosole

NodeJs学习笔记(一)_第2张图片

2.进程

process也是Node.js提供的一个对象,它代表当前Node.js进程。

NodeJs学习笔记(一)_第3张图片

想要在下一次事件响应中执行代码,可以调用process.nextTick()(process.nextTick()函数不是立刻执行,而是要等到下一次事件循环)

NodeJs学习笔记(一)_第4张图片

Node.js进程本身的事件就由process对象来处理。如果我们响应exit事件,就可以在程序即将退出时执行某个回调函数

NodeJs学习笔记(一)_第5张图片

判断自己到底是在什么环境下执行的,常用的方式就是根据浏览器和Node环境提供的全局变量名称来判断

NodeJs学习笔记(一)_第6张图片

fs模块 Node.js内置的fs模块就是文件系统模块,负责读写文件。
和所有其它JavaScript模块不同的是,fs模块同时提供了异步和同步的方法。

异步读取文件fs.readFile

NodeJs学习笔记(一)_第7张图片

异步读取图片fs.readFile

NodeJs学习笔记(一)_第8张图片

当异步读取二进制文件时,回调函数的data参数将返回一个Buffer对象。在Node.js中,Buffer对象就是一个包含零个或任意个字节的数组(注意和Array不同)。

Buffer对象可以和String作转换
NodeJs学习笔记(一)_第9张图片
同步读取文件:fs.readFileSync data被函数直接返回

NodeJs学习笔记(一)_第10张图片

如果同步读取文件发生错误,则需要用try…catch捕获该错误:

NodeJs学习笔记(一)_第11张图片

写文件:

将数据写入文件是通过fs.writeFile()实现的:

writeFile()的参数依次为文件名、数据和回调函数。如果传入的数据是String,默认按UTF-8编码写入文本文件,如果传入的参数是Buffer,则写入的是二进制文件。回调函数由于只关心成功与否,因此只需要一个err参数。

NodeJs学习笔记(一)_第12张图片

和readFile()类似,writeFile()也有一个同步方法,叫writeFileSync():

NodeJs学习笔记(一)_第13张图片

异步/同步读取文件或目录的详细信息:

异步获取文件大小,创建时间等信息,可以使用fs.stat(),它返回一个Stat对象,能告诉我们文件或目录的详细信息

NodeJs学习笔记(一)_第14张图片

同步获取文件大小,创建时间等信息,可以使用fs.statSync()

NodeJs学习笔记(一)_第15张图片

stream是Node.js提供的又一个仅在服务区端可用的模块,目的是支持“流”这种数据结构。

什么是流?流是一种抽象的数据结构。

有些流用来读取数据,比如从文件读取数据时,可以打开一个文件流,然后从文件流中不断地读取数据。有些流用来写入数据,比如向文件写入数据时,只需要把数据不断地往文件流中写进去就可以了。

在Node.js中,流也是一个对象,我们只需要响应流的事件就可以了:
data事件表示流的数据已经可以读取了,
end事件表示这个流已经到末尾了,没有数据可以读取了,
error事件表示出错了。
要注意,data事件可能会有多次,每次传递的chunk是流的一部分数据。

从文件流读取文本内容的示例:

NodeJs学习笔记(一)_第16张图片

要以流的形式写入文件,只需要不断调用write()方法,最后以end()结束:

NodeJs学习笔记(一)_第17张图片

所有可以读取数据的流都继承自stream.Readable,所有可以写入的流都继承自stream.Writable。

pipe事件

就像可以把两个水管串成一个更长的水管一样,两个流也可以串起来。一个Readable流和一个Writable流串起来后,所有的数据自动从Readable流进入Writable流,这种操作叫pipe。

Readable流有一个pipe()方法,就是用来干这件事的。

让我们用pipe()把一个文件流和另一个文件流串起来,这样源文件的所有数据就自动写入到目标文件里了,所以,也就是一个复制文件的程序

默认情况下,当Readable流的数据读取完毕,end事件触发后,将自动关闭Writable流。如果我们不希望自动关闭Writable流,需要传入参数:

readable.pipe(writable, { end: false });

NodeJs学习笔记(一)_第18张图片

HTTP模块

http模块提供的request和response对象。
request对象封装了HTTP请求,我们调用request对象的属性和方法就可以拿到所有HTTP请求的信息;
response对象封装了HTTP响应,我们操作response对象的方法,就可以把HTTP响应返回给浏览器。
写好文件 也可以在命令窗口执行文件(node main.js)

NodeJs学习笔记(一)_第19张图片

我们编写的第一个HTTP服务器程序就好了!

文件服务器

解析URL需要用到Node.js提供的url模块,它使用起来非常简单,通过parse()
将一个字符串解析为一个Url对象处理本地文件目录需要使用Node.js提供的path模块,它可以方便地构造目录

NodeJs学习笔记(一)_第20张图片

NodeJs学习笔记(一)_第21张图片

crypto模块 是为了提供通用的加密和哈希算法

MD5和SHA1

MD5是一种常用的哈希算法,用于给任意数据一个“签名”
Hmac算法也是一种哈希算法,它可以利用MD5或SHA1等哈希算法。不同的是,Hmac还需要一个密钥
只要密钥发生了变化,那么同样的输入数据也会得到不同的签名,因此,可以把Hmac理解为用随机数“增强”的哈希算法

NodeJs学习笔记(一)_第22张图片

AES是一种常用的对称加密算法,加解密都用同一个密钥。crypto模块提供了AES支持,但是需要自己封装好函数,便于使用

NodeJs学习笔记(一)_第23张图片

Diffie-Hellman DH算法是一种密钥交换协议,它可以让双方在不泄漏密钥的情况下协商出一个密钥来

RSA算法是一种非对称加密算法,即由一个私钥和一个公钥构成的密钥对,通过私钥加密,公钥解密,或者通过公钥加密,私钥解密。其中,公钥可以公开,私钥必须保密

你可能感兴趣的:(NodeJS)