node.js事件机制和模块系统

本文介绍了Node.js中的事件机制、模块系统及函数应用等核心概念。包括事件发射器的使用、错误处理、模块间的调用方式及HTTP服务器的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

全局对象:

【注意】永远使用var 定义变量以避免引入全局变量,因为全局变量会污染 命名空间,提高代码的耦合风险

一:(事件机制)

1.事件发射器

所有事件的对象都是 events.EventEmitter 的实例(事件发射器)

①var EventEmitter = require('events').EventEmitter; 

    var event = new EventEmitter(); 

②var events = require('events');

    var  event = new events.EventEmitter();

注册接收:event.on(emmiter, cb)为指定事件emmiter注册了一个监听器,接受字符串emmiter和回调函数cb

发送/射:event.emit(emmiter,  [arg1], [arg2], [...]) 发射emmiter事件,传递若干可选参数到事件监听器的参数表

移除监听器:event.removeListener(emmiter, cb) 移除指定事件的某个监听器,emmiter必须是该事件已经注册过的监听器.如果指定 event,则移除指定事件的所有监听器

单次监听器:event.once(emmiter, cb)

 

 2.error 事件

遇到异常的时候通常会发射error事件,当error 被发射时,EventEmitter规定如果没有响应的监听器,Node.js 会把它当作异常,退出程序。所以要为发射error事件的对象设置监听器,避免遇到错误后整个程序崩溃。例如:

var events = require('events');
var  event = new events.EventEmitter();
event.emit('error');//这里没有响应的监听器,整个程序会崩溃。所以要加监听器

 加上后:

var events = require('events');
var  event = new events.EventEmitter();
event.on('error',function(){
    console.log('程序异常')
})//出错后终端打印异常
event.emit('error');

 

 3.继承:事件的监听和发射应该是一个对象的方法

大多数时候我们不会直接使用 EventEmitter,而是在对象中继承它。包括 fs、net、 http 在内的,只要是支持事件响应的核心模块都是 EventEmitter 的子类。

 

 

 

二:(模块系统)

node的模块系统是为了更方便去相互调用js文件

例如:在hello.js文件里

 

function Hello() {
    varname;
    this.setName = function(thyName) {
        name = thyName};
    this.sayHello = function() {
        console.log('Hello ' + name)};
};
module.exports = Hello;//这时其他文件里,可以直接访问文件,调用方法
  例在main.js里:

 

 

varHello = require('./hello');
hello = new Hello();
hello.setName('BYVoid');
hello.sayHello();
 直接调用的话:

 var Start = require('./event.js')//模块

Start.start();//模块里的某个方法

 

 三(函数)

 可以先定义一个函数,然后传递,也可以在传递参数的地方直接定义函数(匿名函数)

函数传递使得HTTP服务器工作:

原来方法:

var http = require("http");

function onRequest(request, response) {

  response.writeHead(200, {"Content-Type": "text/plain"});

  response.write("Hello World");

  response.end();

 

http.createServer(onRequest).listen(8888);

 

使用匿名函数:

var http = require("http");

http.createServer(function(request, response) {

  response.writeHead(200, {"Content-Type": "text/plain"});

  response.write("Hello World");

  response.end();

 

}).listen(8888);

 

 

 

 

3.

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值