zoukankan      html  css  js  c++  java
  • Node.js入门教程 第二篇 (HelloWorld及事件分发)

    createServer创建第一个Node.js程序

    http模块的createServer函数实际调用V8引擎的C++库,对指定端口进行监听(socket)。当端口有连接访问时进行处理。

    使用createServer函数搭建Node.js服务:

    1 var http = require('http');//引用http模块
    2 
    3 http.createServer(function (request, response) {
    4     response.writeHead(200, {'Content-Type': 'text/plain'});
    5     response.end('Hello World
    ');
    6 }).listen(8080);//端口号

    在浏览器中输入127.0.0.1:8080即可查看到Hello World。

    此外, 代码中require用来引用模块。除了引用Node.js基础API模块,我们也可以自己定义模块并引用。具体,看后文Node.js的模块

    EventEmitter(事件分发)

    Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列。Node.js 里面的许多对象都会分发事件。

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

    EventEmitter 对象如果在实例化时发生错误,会触发 error 事件。当添加新的监听器时,newListener 事件会触发,当监听器被移除时,removeListener 事件被触发。

    1 var EventEmitter = require('events').EventEmitter; 
    2 var event = new EventEmitter(); 
    3 event.on('event_name', function() { 
    4     console.log('event_name事件触发'); 
    5 }); 
    6 setTimeout(function() { 
    7     event.emit('event_name'); 
    8 }, 1000);

    执行结果:1s后输出event_name事件触发

    同一个事件对象可以添加多个监听者:

    1 var events = require('events'); 
    2 var emitter = new events.EventEmitter(); 
    3 emitter.on('someEvent', function(arg1, arg2) { 
    4     console.log('listener1', arg1, arg2); 
    5 }); 
    6 emitter.on('someEvent', function(arg1, arg2) { 
    7     console.log('listener2', arg1, arg2); 
    8 }); 
    9 emitter.emit('someEvent', 'arg1 参数', 'arg2 参数'); 

    执行结果:

    listener1 arg1 参数 arg2 参数

    listener2 arg1 参数 arg2 参数

     

    EventEmitter常用函数:

    序号

    方法 & 描述

    1

    addListener(event, listener)

    为指定事件添加一个监听器到监听器数组的尾部。

    2

    on(event, listener)

    为指定事件注册一个监听器,接受一个字符串 event 和一个回调函数。

    server.on('connection', function (stream) {

    console.log('someone connected!');

    });

    3

    once(event, listener)

    为指定事件注册一个单次监听器,即 监听器最多只会触发一次,触发后立刻解除该监听器。

    server.once('connection', function (stream) {

    console.log('Ah, we have our first user!');

    });

    4

    removeListener(event, listener)

    移除指定事件的某个监听器,监听器必须是该事件已经注册过的监听器。

    它接受两个参数,第一个是事件名称,第二个是回调函数名称。

    var callback = function(stream) {

    console.log('someone connected!');

    };

    server.on('connection', callback);

    // ...

    server.removeListener('connection', callback);

    5

    removeAllListeners([event])

    移除所有事件的所有监听器, 如果指定事件,则移除指定事件的所有监听器。

    6

    setMaxListeners(n)

    默认情况下, EventEmitters 如果你添加的监听器超过 10 个就会输出警告信息。 setMaxListeners 函数用于提高监听器的默认限制的数量。

    7

    listeners(event)

    返回指定事件的监听器数组。

    8

    emit(event, [arg1], [arg2], [...])

    按监听器的顺序执行执行每个监听器,如果事件有注册监听返回 true,否则返回 false

     

     

    Node.js的全局对象

    JavaScript 中有一个特殊的对象,称为全局对象(Global Object),它及其所有属性都可以在程序的任何地方访问,即全局变量。

    在浏览器 JavaScript 中,通常 window 是全局对象, 而 Node.js 中的全局对象是 global,所有全局变量(除了 global 本身以外)都是 global 对象的属性。

    Node.js 我们可以直接访问到 global 的属性,而不需要在应用中包含它。

     

    Node.js中有不少常用的全局变量/函数,如:setTimeoutsetIntervalconsole等。

     

    我们也可以自定义全局变量/函数:

    1 //定义
    2 global.userName='Jimmy';
    3 //使用
    4 const name=global.userName;
  • 相关阅读:
    Java实现 蓝桥杯VIP 算法训练 接水问题
    Java实现 蓝桥杯VIP 算法训练 接水问题
    Java实现 蓝桥杯VIP 算法训练 接水问题
    谈Delphi中SSL协议的应用(好多相关文章)
    DELPHI中IDE宏录制小用
    SQLite数据库的体系结构(翻译自sqlite.org)
    NewPascal(也许只是对FreePascal的一种封装)
    Loongnix 系统(MIPS Linux)
    死锁的解决经历
    获得WCF Client端的本地端口
  • 原文地址:https://www.cnblogs.com/JHelius/p/11643156.html
Copyright © 2011-2022 走看看