美文网首页
Learn Node By runoob

Learn Node By runoob

作者: Suki_Yang | 来源:发表于2018-03-25 17:51 被阅读0次

    Node.js的组成部分

    • 引入required模块:可以使用require指令来载入Node.js模块。
    • 创建服务器:服务器可以监听客户端的请求
    • 接收请求与响应请求:使用浏览器和终端发送HTTP请求,服务器接收请求后返回响应数据。

    Node.js事件循环

    Node.js是单进程单线程应用程序,但是通过事件(观察者模式)和回调支持并发,所以性能非常高。
    Node.js的每一个API都是异步的,并作为一个独立线程运行,使用异步函数调用,并处理并发。

    事件驱动程序

    Node.js使用事件驱动模型,当web server接收到请求,就把它关闭然后进行处理,然后去服务下一个web请求。
    当这个请求完成,它被放回处理队列,当到达队列开头,这个结果被返回给用户。
    这个模型非常高效可扩展性非常强,因为webserver一直接受请求而不等待任何读写操作。(非阻塞式IO/事件驱动IO)
    在事件驱动模型中,会生成一个主循环来监听事件,当检测到事件时触发回调函数。

    event_loop.jpg

    EventEmitter

    events模块只提供了一个对象:events.EventEmitter。EventEmitter的核心就是事情触发与事件监听器功能的封装。

    Node.js Buffer

    Buffer用来创建一个专门存放二进制数据的缓存区。

    Node.js Stream

    Stream(流)是一个抽象接口。

    1. Stream四种流类型
    • Readable(可读操作)
    • Writable(可写操作)
    • Duplex(可读可写操作)
    • Transform(操作被写入数据,然后读出结果)
    1. 所有的Stream对象都是EventEmitter的实例。常用的事情有:
    • data:当有数据可读时触发。
    • end:没有更多的数据可读时触发。
    • error:在接收和写入过程中发生错误时触发。
    • finish:所有数据已被写入到底层系统时触发。
    1. 管道流
      管道提供了一个输出流到输入流的机制。通常用于从一个流中获取数据并将数据传递到另一个流中。
      ->实现大文件的复制过程
    pipe.png
    1. 链式流
      链式是通过连接输出流到另一个流并创建多个流操作链的机制。链式流一般用于管道操作。

    Node.js模块系统

    Node.js提供了exports和require两个对象,其中 exports是模块公开的接口,require用于从外部获取一个模块的接口,即所获取模块的exports对象。

    nodejs-require.jpg

    Node.js 全局对象

    • __filename表示当前正在执行的脚本的文件名。
    • __dirname表示当前执行脚本所在的目录。
      process全局变量

    Node.js工具模块

    OS模块:提供基本的系统操作函数。
    Path模块:提供了处理和转换文件路径的工具。
    Net模块:用于底层的网络通信。
    DNS模块:用于解析域名。
    Domain模块:简化异步代码的异常处理,可以捕捉处理try catch无法捕捉的。

    Node.js Express框架

    Expree框架核心特性:

    • 可以设置中间件来响应HTTP请求
    • 定义了路由表用于执行不同的HTTP请求动作
    • 可以通过向模版传递参数来动态渲染HTML页面

    与express框架安装的重要模块

    • body-parser:node.js中间件,用于处理JSON,Raw,Text和URL编码的数据。
    • cookie-parser:解析Cookie的工具。
    • multer:node.js中间件,用于处理enctype="multipart/form-data"(设置表单的MIME编码)的表单数据。
    var express = require('express');
    var app = express();
    
    //Express提供了内置的中间件express.static来设置静态文件
    app.use(express.static('public'));
    
    //主页输出"Hello World"
    app.get('/', function (req, res) {
      console.log('主页GET请求');
      res.send('Hello GET');
    });
    
    //POST请求
    app.post('/', function(req, res) {
      console.log('主页POST请求');
      res.send('Hello POST');
    });
    
    //del_user页面响应
    app.get('/del_user', function(req, res){
      console.log('/del_user响应DELETE请求');
      res.send('删除页面');
    });
    
    var server = app.listen(8081, function(){
      var host = server.address().address;
      var port = server.address().port;
      console.log('访问地址为http://%s:%s', host, port);
    });
    

    Node.js 多进程

    每个子进程总是带有三个流对象:child.stdin, child.stdout和child.stderr。他们可能会共享父进程的stdio流,或者也可以是独立的被导流的流对象。
    Node提供child_process模块来创建子进程,方法有:
    exec:使用子进程执行命令,缓存子进程的输出,并将子进程的输出以回调函数参数的形式返回。
    spawn:使用指定的命令行创建新进程。
    fork:是spawn的特殊形式,用于在子进程中运行的模块。与spawn不同的是,fork会在父进程和子进程之间,建立一个通信管道,用于进程之间的通信。

    代码链接

    https://github.com/yxq199348/Node

    参考连接

    http://www.runoob.com/nodejs/nodejs-tutorial.html

    相关文章

      网友评论

          本文标题:Learn Node By runoob

          本文链接:https://www.haomeiwen.com/subject/tbdqcftx.html