美文网首页
Node之基础全局作用域及全局函数

Node之基础全局作用域及全局函数

作者: 27亿光年中的小小尘埃 | 来源:发表于2019-12-24 15:13 被阅读0次

    全局对象

    global

    setTimeout函数与clearTimeout函数,setInterval函数与clearInterval函数

    与浏览器端相似

    不同点:

    • 定时器对象的unref方法:可以取消定时器的函数调用
    • 定时器对象的ref方法:可以重新启用定时器的函数调用

    使用require函数加载模块

    var foo = require('../foo.js');
    //
    或
    varhttp = require('http');
    

    require.main

    在Node.js中,定义了一个require.main变量,用于检测一个模块是否为应用程序中的主模块。使用方法如下所示(需要将这段代码书写在被检测的模块文件内部)。

    if(module === require.main) {
        console.log('这是应用的主模块');
    }
    

    使用require.resolve函数查询完整模块名

    使用require.resolve函数来查询某个模块文件的带有完整绝对路径的文件名

    require.resolve('./testModule.js');
    
    

    require.cache对象

    require.cache对象,代表缓存了所有已被加载模块的缓存区。

    __filename变量与__dirname变量

    用于获取当前模块文件名的__filename变量与用于获取当前目录名的__dirname变量。

    在任何模块文件内部,可以使用__filename变量获取当前模块文件的带有完整绝对路径的文件名。

    在任何模块文件内部,可以使用__dirname变量获取当前模块文件所在目录的完整绝对路径。

    EventEmitter类

    在Node.js的用于实现各种事件处理的event模块中,定义了一个EventEmitter类。所有可能触发事件的对象都是一个继承了EventEmitter类的子类的实例对象,在Node.js中,为EventEmitter类定义了许多方法,所有与对象的事件处理函数的绑定及解除相关的处理均依靠这些方法的调用来执行。

    方法名与参数 描述
    addListener(event,listener) 对指定事件绑定事件处理函数
    on(event,listener) 对指定事件绑定事件处理函数(addListener方法的别名)
    once(event,listener) 对指定事件只执行一次的事件处理函数
    removeListener(event,listener) 对指定事件解除事件处理函数
    removeAllListener([event]) 对指定事件解除所有事件处理函数
    setMaxListeners(n) 指定事件处理函数的最大数量。n为整数值,代表最大的可指定事件处理函数的数量
    listener(event) 获取指定事件的所有事件处理函数
    emit(event,[arg],[arg2],[...]) 手工触发指定事件

    使用on方法绑定事件

    var http = require('http'); //引用http模块
    var server = http.createServer(); //创建http服务器并将该服务器赋值给变量server
        //为server服务器在接收到客户端请求时触发的request事件绑定事件处理函数
        server.on('request', function(req,res) {
        console.log(req.url);
        res.end();
    });
    server.listen(1337, "127.0.0.1");
    

    对同一个事件绑定多个事件处理函数

    var http = require('http'); //引用http模块
    var server = http.createServer(); //创建http服务器并将该服务器赋值给变量server
    //为server服务器在接收到客户端请求时触发的request事件绑定事件处理函数
    server.on('request', function (req, res) {
      console.log('收到客户端请求');
      res.end();
    });
    server.on('request', function (req, res) {
      if (req.url !== "/favicon.ico") {
        console.log(req.url);
      }
      res.end();
    });
    server.on('request', function (req, res) {
      if (req.url !== "/favicon.ico")
        console.log(' 发送响应完毕。');
      });
    server.listen(1337, "127.0.0.1");
    

    设定最多可以指定的事件处理函数数量

    setMaxListeners方法使用一个整数值参数,代表最多可以指定的事件处理函数数量。

    emitter.setMaxListeners(1)
    

    取得指定事件的所有事件处理函数

    listeners方法使用一个参数,参数值为指定事件名。该方法返回由该事件的所有事件处理函数构成的数组。

    emitter.listeners(event)
    

    使用once方法绑定事件

    用法跟on绑定事件是一样的,once会当事件处理函数执行一次后立即被解除,即该事件处理函数只会被执行一次。

    var http = require('http'); //引用http模块
    var server = http.createServer(); //创建http服务器并将该服务器赋值给变量server
    //为server服务器在接收到客户端请求时触发的request事件绑定事件处理函数
    server.setMaxListeners(10)
    server.once('request', function (req, res) {
      console.log('收到客户端请求');
      res.end();
    });
    server.on('request', function (req, res) {
      if (req.url !== "/favicon.ico") {
        console.log(req.url);
      }
      res.end();
    });
    server.once('request', function (req, res) {
      if (req.url !== "/favicon.ico")
        console.log(' 发送响应完毕。');
      });
    server.listen(1337, "127.0.0.1");
    

    移除指定事件的事件处理函数

    在removeAllListeners方法中,可以使用一个参数,参数值为需要被解除事件处理函数的事件名。

    var http = require('http'); //引用http模块
    var server = http.createServer(); //创建http服务器并将该服务器赋值给变量server
    //为server服务器在接收到客户端请求时触发的request事件绑定事件处理函数
    server.setMaxListeners(10)
    server.once('request', function (req, res) {
      console.log('收到客户端请求');
      res.end();
    });
    let testFuntion = function (req, res) {
      if (req.url !== "/favicon.ico")
        console.log(' 发送响应完毕。');
      }
    server.on('request', function (req, res) {
      if (req.url !== "/favicon.ico") {
        console.log(req.url);
      }
      res.end();
    });
    server.on('request', testFuntion);
    server.removeListener('request',testFuntion)
    server.listen(1337, "127.0.0.1");
    

    在removeAllListeners方法中使用事件名参数时,将取消该事件的所有事件处理函数;如果在removeAllListeners方法中不使用事件名参数时,将取消所有已被指定的事件。

    
    var http = require('http'); //引用http模块
    var server = http.createServer(); //创建http服务器并将该服务器赋值给变量server
    //为server服务器在接收到客户端请求时触发的request事件绑定事件处理函数
    server.setMaxListeners(10)
    server.once('request', function (req, res) {
      console.log('收到客户端请求');
      res.end();
    });
    let testFuntion = function (req, res) {
      if (req.url !== "/favicon.ico")
        console.log(' 发送响应完毕。');
      }
    server.on('request', function (req, res) {
      if (req.url !== "/favicon.ico") {
        console.log(req.url);
      }
      res.end();
    });
    server.removeAllListeners('request');
    server.on('request', testFuntion);
    server.listen(1337, "127.0.0.1");
    

    emit手动触发事件

    当你需要手工触发某个对象的一个事件时,可以使用EventEmitter类的emit方法,在emit方法中可以使用一个或多个参数,其中第一个参数值为需要手工触发的事件名,从第二个参数开始为需要传递给事件处理函数的参数。

    var http = require('http'); //引用http模块
    var server = http.createServer(); //创建http服务器并将该服务器赋值给变量server
    //为server服务器在接收到客户端请求时触发的request事件绑定事件处理函数
    server.setMaxListeners(10)
    server.once('request', function (req, res) {
      console.log('收到客户端请求');
      res.end();
    });
    let testFuntion = function (arg1, arg2) {
     console.log(arg1, arg2);
     
    }
    server.on('request', function (req, res) {
      if (req.url !== "/favicon.ico") {
        console.log(req.url);
      }
      res.end();
    });
    server.on('emit', testFuntion);
    server.emit('emit',1,2)
    
    server.listen(1337, "127.0.0.1");
    

    获取指定事件的事件处理函数的数量

    EventEmitter类自身拥有一个listenerCount方法,可用来获取某个对象的指定事件的事件处理函数的数量,在listenerCount方法中,使用两个参数,其中第一个参数用于指定需要获取哪个对象的事件处理函数的数量,第二个参数用于指定需要获取哪个事件的事件处理函数的数量。

    var http = require('http'); //引用http模块
    var events = require('events'); //引入events模块
    var server = http.createServer(); //创建http服务器并将该服务器赋值给变量server
    //为server服务器在接收到客户端请求时触发的request事件绑定事件处理函数
    server.setMaxListeners(10)
    server.on('request', function (req, res) {
      // res.end();
    });
    let testFuntion = function (req, res) {
      console.log(events.EventEmitter.listenerCount(server,'request'));
      
      res.end(`${events.EventEmitter.listenerCount(server,'request')}`);
    }
    server.on('request', function (req, res) {
      if (req.url !== "/favicon.ico") {
        console.log(req.url);
      }
      // res.end();
    });
    server.on('request', testFuntion);
    server.listen(1337, "127.0.0.1");
    

    EventEmitter类自身所拥有的事件监听newListener事件及removeListener事件

    var http = require('http'); //引用http模块
    var server = http.createServer(); //创建http服务器并将该服务器赋值给变量server
    server.on('removeListener',function(e,f){
      console.log("对"+e+"事件取消事件处理函数");
      console.log(f);
    });
    server.on('newListener',function(e,f){
      console.log("对"+e+"事件添加事件处理函数");
      console.log(f);
    });
    var testFunction=function(req,res) {
    if(req.url!=="/favicon.ico")
      console.log('发送响应完毕。');
    };
    //为server服务器在接收到客户端请求时触发的request事件绑定多个事件处理函数
    server.on('request', function(req,res) {
      if(req.url!=="/favicon.ico")
      console.log('接收到客户端请求');
    });
    server.on('request', function(req,res) {
      if(req.url!=="/favicon.ico"){
        console.log(req.url);
      }
      res.end();
    });
    server.on('request',testFunction);
    server.removeListener('request',testFunction);
    server.listen(1337, "127.0.0.1");
    

    相关文章

      网友评论

          本文标题:Node之基础全局作用域及全局函数

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