Nodejs学习

Node.js

一、基本知识

Node.js是运行在服务端的Javascript,基于Chrome Javascript运行时建立的一个平台。

Node.js是一个事件驱动I/O的,服务端JavaScript环境。因为它的开发语言就是Javascript.
最明显的一个差异是:NodeJs没有浏览器,没有dom,没有onclick

Nodejs中的文件,绝大多数情况下是.js结尾。

Nodejs本质就是创建各种服务,通过各种接口提供各种数据。

打开方式:
比如在某个文件下了一个demo.js文件。
打开方式1:直接在当前工作目录当中,打开控制台。
1)按住shift键,同时点击鼠标右键
2)选择在此处打开Powershell窗口。
3)在该窗口输入 node 文件名.js
(如 node demo.js)

例子2:见demo2.js
使用NodeJs来创建一个http服务,要由以下三个部分组成:
1)引入模块,require
2)创建服务器;
3)处理响应与请求。

——————————————————————

Nodejs它的异步编程的直接体现就是“异步”。需要通过异步来处理大并发。

在Nodejs中,操作文件用的是fs模块,它主要是用来操作文件的读取啊写入等。
例子3:(阻塞相关) demo3.js
(非阻塞)demo4.js

Promise:
https://www.cnblogs.com/linwenbin/p/12656664.html
——————————————————————

Nodejs是一个单进程单线程的应用程序。但是因为Google v8引擎提供了异步执行回调的接口,通过这些接口来处理大的并发请求,性能很高。

Nodejs基本上所有的事件机制都是基于设计模式中的观察者模式。
简单来说,nodejs使用事件驱动的模型,每当接收到一个请求,就把它关掉进行成立,当这个请求完成,就把它放到处理队列当中,最后把结果返回给用户。因为它的服务一直是处理接受请求,但不等待任何的读写操作,所以性能很高,这也叫做“非阻塞式的IO或是事件驱动”。

Nodejs的事件是使用events模块,通过实例化它里面的EventEmitter类来绑定和监听事件。其中:
绑定事件:.on(…)
监听事件的触发:.emit(…)

Nodejs里面所有的异步的IO操作,都会在完成时发送一个事件到事件队列。
events这个模块只有一个对象,events.EventEmitter.
它的核心:“事件触发与监听功能的封装。”

——————————————————————
Nodejs缓存/缓冲区。
Nodejs的开发语言就是js,js语言自身只有字符串数据类型,没有二进制数据类型。

nodejs有时会操作一些文件或者是TCP流之类的东西,那么就必须要操作二进制数据。因此在nodejs中有一个Buffer类,它用来创建一个专门存放二进制数据的缓存区。

原始数据/二进制数据是存储在Buffer类的实例里的,一个Buffer类相当于是一个整数的数组,相当于划出了一块自己的内存空间。

Buffer类的实例用于表示编码字符的序列,它支持utf-8,base64,asii等。

具体操作:
1)创建一个Buffer类:Buffer.alloc, 它返回一个指定大小的Buffer实例。
2)向Buffer实例当中写入内容:.write()
3)从缓冲区中读取数据:.toString()
4)Buffer转换为JSON对象:buf.toJSON(),它的返回值是一个JSON对象。(JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。)
5)返回一个被array数组的值初始化之后的新的Buffer实例:Buffer.from(); (注意:array数组中的元素只能是数字,否则会被0覆盖)

JSON.stringify(),一个JavaScript值(对象或数组)转换为一个JSON字符串。
JSON.parse 将json字符串转为json对象。

——————————————————————
Nodejs的Stream()流。
流是一个抽象的接口,在NodeJs中,很多方法对象它们都实现了这个接口。eg:之前创建的一个服务,向服务器发送一个请求,requests对象它其实就是个Stream.

Nodejs中,Stream有四种流类型:

  1. Readable 可读操作
    2)Writable 可写操作
    3)Duple 可读可写操作
    4)Transform 操作被写入数据,然后读出结果。

所有的Stream对象都是EventEmitter,常用的事件:
-data 当有数据可读取时触发
-end 没有更多的数据可读取时触发
-error 在接受和写入过程中,发生错误时触发
-finish 所有的数据已经被写入之后触发

读取流:demoi.js
写入流:demoj.js
管道流:nodejs中的管道流,提供了一个从输出流到输入流的机制,(就像水龙头一样,从一个地方流入到另一个地方)就是从一个流当中获取数据,并传递到另一个流当中。主要用到的方法:.pipe()方法。 Eg:demok.js
(管道流:参考在线看视频来理解管道流。)
链式流:从一个输出流当中读取数据,创建了多个流来操作输出流的数据的机制。链式流一般用来操作管道流。常见的例子就是压缩(demos.js)和解压缩(demot.js)的例子。

——————————————————————
模块系统
模块是Nodejs应用的基本组成部分,文件和模块是一一对应的。一个Nodejs的文件就是一个模块。

nodejs提供了两个对象:
1)exports:它是模块公开的接口。
2) require:用来获取外部的模块的接口

创建模块有两种方式:
1)只公开一个方法:exports.方法名=function(){ };
2)把整个模块全部公开出来: module.exports=function(){ };

Eg:demo10.js, demo10.2.js

——————————————————————
Get与Post请求:
●获得get请求的内容,(get请求是被嵌入到url当中的)它的内容是在url的?之后的部分。要用到的:
-util:是nodejs的工具模块,有许多方法。
-util.inspect:用来把对象转换为字符串
-url, 是nodejs的url模块。
-url.parse:解析url的请求。
注意:.end方法只能向页面发送字符串。
url.parse()方法返回的是一个对象。
res.write() 向页面写入。

●post请求:
在很多场景中,我们的服务器都需要跟用户的浏览器打交道,如表单提交。表单提交到服务器一般都使用 GET/POST 请求。
https://www.runoob.com/nodejs/node-js-get-post.html

要用到:
querystring也是个模块,用来解析URL。一般是对HTTP请求所带的数据进行解析,提供四个方法。querystring.parse(将字符串转换为对象), querystring.stringify, querystring.escape, querystring.unescape。

var http=require('http');
var querystring=require('querystring');

http.createServer(function(req,res){
    var body='';
    //当有数据的时候,如何如何
    req.on('data',function(_d){
       body+= _d;
    });
    //当所有数据接受完了,要做什么
    req.on('end',function(){
       body=querystring.parse(body);
       res.writeHead(200,{
          'Content-Type':'text/plain;charset=utf-8'
       })
       //向页面写东西
       res.write()
       res.end();
    });
    //没写完...看上面发的链接。
})

Express

见A1.js

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值