zoukankan      html  css  js  c++  java
  • node简介

    一、什么是node.js

      Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。

      Node.js是一个让js运行在服务器端环境(类似于jvm)。

      Node.js提供了大量的工具库,使得js语言可以和操作系统交互(比如读写文件、新建子进程等)。从这个角度讲,node是js的工具库。

     

     二、Node的常用命令

      a、进入 REPL:

        – node – node

        --use_strict

      • REPL 环境中:

      – 类似 Chrome Developer Tools → Consoles

      – 特殊变量下划线(_)表示上一个命令的返回结果

      – 通过 .exit 或执行 process.exit() 退出 REPL 交互

      b、运行js代码 

      -在控制台进入当前的js文件所在的目录

      -node ./*.js

    三、Node的全局对象

      Node中的全局对象是global。类似于客户端 JavaScript 运行环境中的 window。

      global属性:指向全局对象global。

    • Buffer
    • __dirname
    • __filename
    • clearImmediate(immediateObject)
    • clearInterval(intervalObject)
    • clearTimeout(timeoutObject)
    • console
    • exports
    • global
    • module
    • process
    • require()
    • setImmediate(callback[, ...args])
    • setInterval(callback, delay[, ...args])
    • setTimeout(callback, delay[, ...args])  

      全局变量在所有模块中均可使用。 但以下变量的作用域只在模块内,详见 module文档:

    • __dirname
    • __filename
    • exports
    • module
    • require()

      常用的全局对象

      process 对象是一个全局变量,它提供当前 Node.js 进程的有关信息,以及控制当前 Node.js 进程。 因为是全局变量,所以无需使用 require()

      常用属性(详细参考开发文档)

        a、process.argv  process.argv 属性返回一个数组,这个数组包含了启动Node.js进程时的命令行参数。

            b、process.stdout.write()    等价于没有换行的console.log();    

        c、process.stdin.on('data',callback(input))  //注册一个接受用户输入的事件。

    四、Node中的异步回调函数实现  

     1 //node中的异步回调函数的实现
     2     console.log("开始任务");
     3     setTimeout((filename) => {
     4        var file=redfile(filename) //阻塞io的操作 读文件
     5        print(file) //打印文件内容
     6     }, 0);
     7     console.log("结束任务");
     8 
     9     console.log("开始任务");
    10       
    11     //读写文件的函数
    12     function getfile(filename,callback){
    13         if(file可读)
    14             //错误优先的回调函数:try/catch语句无法捕获异步代码中的错误
    15             callback(null,file);
    16         else         
    17             //错误优先的回调函数:try/catch语句无法捕获异步代码中的错误
    18             //异步的throw new Error('文件读取失败') 抛出的错误可能无法捕获。
    19             callback(new Error('文件读取失败'))      
    20     }
    21     //使用函数
    22     getfile(filename,(err,file)=>{
    23         if(err)
    24             throw err;
    25         print(file);//打印文件内容
    26     })
    27     console.log("结束任务");

    五、Node中自定义事件  

     1 var event=require('events');
     2 //自定义事件的构造函数
     3 function Myevent(){
     4     //让先创建的events对象继承EventEmitter中的属性
     5     event.EventEmitter.call(this);
     6     //时间注册监听
     7     this.register=function(){
     8         this.once('Myevent',function(){
     9             process.stdout.write('this is my event');
    10         })
    11     }
    12 }
    13 //继承EventEmitter的方法
    14 Myevent.prototype=event.EventEmitter.prototype;
    15 //创建事件
    16 var myevent=new Myevent();
    17 //为事件注册一个监听
    18 myevent.register();
    19 //发射事件
    20 myevent.emit('Myevent');

    六、Node.js的事件机制 

      Node.js应用程序在一个单线程的事件驱动模型中运行。虽然Node.js在后台实现了一个线程池来做工作,但是应用程序本身不具备多线程的任何概念。

      在传统的线程网络模型中,请求进入一个Web服务器,并被分配给一个可用的线程,对于该请求的处理工作继续在该线程上进行,直到请求完成并发出响应。

      

      node.js不会在各个线程上执行每个请求的所有工作,而是把工作添加到事件队列中,然后通过一个单线程的事件循环从事件队列中把工作提取出来执行,事件循环会抓取事件队列中最上层的工作,执行它,先后抓取下一个找工作执行,当事件队列里的所有工作都被执行完成时,node.js应用程序终止。

      

      上面图中有两个请求GetFile和GetData.Node.js程序把两个请求添加进事件队列中,然后事件循环主线程会提取出第一个GetFile请求,执行完成后执行回调函数,回调函数中的Open(file)和它的回调函数请求被添加进事件队列中,事件循环从事件队列中提取下一个GetData请求执行,执行完成后执行回调函数,后调函数中的Connect(file)和他的回调函数被加入事件队列,这种情况会一直持续到事件队列中没有可提取的事件为止。

      阻塞IO:停止当前线程的执行等待回应,直到收到回应才继续执行,阻塞IO的例子有:请求文件、读取数据库、请求套接字、访问远程服务。

      Node.js采用事件回调来避免对阻塞IO的等待。事件循环主线程会将阻塞IO的请求放入Node后台的线程池中执行,主线程可以处理其他的请求,当后台线程处理完那个阻塞IO的请求,主线程执行对应的回调函数,如果回调函数中没有阻塞IO的代码,直接执行返回,如果回调函数中包含阻塞IO的代码,继续放入事件循环的队伍,等待事件循环执行。

      

  • 相关阅读:
    MariaDB · 版本特性 · MariaDB 的 GTID 介绍
    stm8s 中断重复进入
    PCB积累
    链表的创建、增加、删除、改数据、遍历
    百度文库文字下载工具指引
    防倒灌的开关电路
    AD快速从原理图查找pcb中元件
    三目运算符填坑
    嵌入式结构化分层思想
    原码,反码,补码
  • 原文地址:https://www.cnblogs.com/yiluhuakai/p/8511759.html
Copyright © 2011-2022 走看看