Node.js(基础知识一)


  • NPM是NodeJS包管理工具;
    package.json用于定义包的属性;
    Node.js自带REPL(交互式解释器)。

Node.js的异步实现

Node.js异步编程的直接体现就是回调。
异步编程依托于回调来实现,但不是使用了回调就实现了异步。
回调函数在完成任务后就会被调用,Node使用了大量的回调函数,Node所有API都支持回调函数。

Node.js是单进程、单线程应用程序,但是通过事件和回调支持并发,所以性能非常高。
Node.js的每一个API都是异步的,并作为一个独立线程运行,使用异步函数调用,并处理并发。
Node.js基本上所有的事件机制都是用设计模式中观察者模式实现。
Node.js单线程类似进入一个while(true)的事件循环,直到没有事件观察者之后就退出,每个异步事件都产生一个事件观察者,如果有事件发生就调用该回调函数。

Node.js使用事件驱动模型,当web server接受到请求,就把开启相应的API进行处理,然后去服务下一个web请求。
当这个请求完成,它被放回处理队列,当到达队列的开头,这个结果被返回给用户。
因为web server一直接受请求而不等待任何读写操作,因此称为非阻塞IO或事件驱动IO。

在Node应用中,很多API继承自EventEmitter,具有许多可以异步执行的函数,这类函数一般第一个参数为回调时发生错误返回的错误对象,最后一个参数为需要被回调的函数。
eg:

var fs = require("fs");
fs.readFile('input.txt',function (err, data){
    if (err){
        console.log(err.stack);
        return;
    }
    console.log(data.toString());
});
console.log("程序执行完毕");

这里模块fs的方法readFile就是一个支持异步操作的函数。

EventEmitter

Node.js所有的异步I/O操作在完成时都会发送一个事件到事件队列。
Node.js里面的许多对象都会分发事件:一个net.Server对象会在每次有新连接时分发一个事件,一个fs.readStream对象会在文件被打开的时候发出一个事件。所有这些产生事件的对象都是events.EventEmitter的实例。

EventEmitter的核心就是事件触发与事件监听器功能的封装。
可以通过require(“events”);来访问该模块。
eg:

var events = require('events');
var eventEmitter = new events.EventEmitter();

用法:

eventEmitter.on('some_event',function(arg1){  //绑定函数
    console.log('some_event 事件触发',arg1);
});
event.emit('some_event','参数');  //发布函数

Node.js模块系统

为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统。
模块是Node.js应用程序的基本组成部分,文件和模块是一一对应的。换言之,一个Node.js文件就是一个模块,这个文件可能是JavaScript代码、JSON或者编译过的C/C++扩展。

模块之间的调用,被调用方可以下面的方式标明可以在本模块可以被调用的函数或者对象。
eg:

//函数本身标明自己可以被调用
exports.func = function(){ ...}

//将对象封装到模块里
function Hello(){
    var name;
    this.setName = function(name){
        this.name = name;
    };
    this.sayHello = function(){
        console.log('Hello' + name);
    };
};
module.exports = Hello;

调用使用require先引进
eg:

var Hello = require('./hello');
hello = new Hello();
hello.setName('John');
hello.sayHello();

有些模块是Node自带的,比如http模块。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值