Node 学习总结

1.  Windows 安装包(.msi)

32 位安装包下载地址 : https://nodejs.org/dist/v4.4.3/node-v4.4.3-x86.msi

64 位安装包下载地址 : https://nodejs.org/dist/v4.4.3/node-v4.4.3-x64.msi

下载后正常安装即可: ( 注意下图:点击树形图标来选择你需要的安装模式) 其他的正常选择即可。

安装后,打开cmd==>输入“path”检查是否有node 路径。(绿色字体为输入命令)

输入 node -v ==>输出 node的版本 

输入 node ==> 会切换到 node 环境=node.exe

2.Hello World

建一个文件例如在G:\webNode\index.js

'use strict';

console.log('Hello, world.');

打开cmd , G:>cd webNode   ==>  G:\webNode>node index.js  ==>  Hello World. 

3.创建服务器

建一个文件例如在G:\webNode\server.js

var http = require('http');

http.createServer(function (request, response) {

    // 发送 HTTP 头部

    // HTTP 状态值: 200 : OK

    // 内容类型: text/plain

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

    // 发送响应数据 "Hello World"

    response.end('Hello World\n');}).listen(8888);

// 终端打印如下信息

console.log('Server running at http://127.0.0.1:8888/');

执行 node server.js  ‘’ 会输出  Server running at http://127.0.0.1:8888/‘’

然后,打开浏览器访问 http://127.0.0.1:8888/,你会看到一个写着 "Hello World"的网页

4.node.js REPL

node.js REPL(Read Eval Print Loop:交互式解释器)表示一个电脑的环境,类似window系统的终端。Node 自带了交互式解释器。可以执行以下任务:

                读取--读取用户输入,解析输入了js数据结构并储存在内存里;

                执行--执行输入的数据结构;

                打印--输出结果;

                循环--循环操作以上步骤知道两次Ctrl-c按钮退出;

REPL 命令: ctrl+c -- 退出当前终端。

                    Ctrl+c 按两下 -- 退出Node REPL

                    Ctrl+d -- 退出Node REPL

                    上下键 -- 查看输入的历史命令

                    tab键 -- 列出当前命令

                    .help -- 列出使用命令

                    .break / .clear --退出多行表达式

                    .save filename -- 保存当前的Node REPL  会话到指定文件。

                    .load filename -- 载入当前Node REPL 会话的文件内容。

5.模块

    在node.js中,一般将代码合理拆分到不同的js文件中,每个文件就是一个模块,而文件路径就是模块名。

    在编写每个模块时,都有require,exports,module三个预先定义好的变量可供使用。

    require

    require函数用于在当前模块中加载和使用别的模块,传入一个模块名(如果路径就是模块名那传入的这模块名是否要和文件名一样???相当于HTML文件引入其他js文件),返回一个模块导出对象,模块名可使用相对路径或者绝对路径。模块名的.js扩展名可以省略。(答案不完全是。如果是“fs”则表示不做路径处理,直接返回内部模块的导出对象。)

    exports

    exports 对象是当前模块的导出对象,用于导处模块公有方法和属性。别的模块通过require函数使用当前模块时得到的就是当前模块的exports对象。

    module

    通过module对象可以访问到当前模块的一些相关信息。但最多的用涂是替换当前模块的导出对象。

6. Node.js 回调函数

node.js 异步编程的直接体现就是回调。

异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了。

回调函数在完成任务后就会被调用。node 使用了大量的回调函数,node 所有的API都支持回调函数。

 G:\webNode\nodeTouch\block.js   和   G:\webNode\nodeTouch\blockno.js

阻塞代码实例:

var fs = require("fs");

var data = fs.readFileSync("input.txt");

console.log(data.toString());

console.log("程序执行结束!")

非阻塞代码实例:

var fs = require("fs");

fs.readFile('input.txt', function(err,data){

  if(err) return console.error(err);

  console.log(data.toString());

});

console.log("程序执行结束!")

第一个实例--在文件读取完之后才执行程序,

第二个--不需要等文件读取完,就可以执行,大大提高了程序的性能。

因此,阻塞是按顺序执行,而非阻塞 是不按顺序执行的

所以,如果我们处理回调函数的参数,我们就需要写在回调函数内。

 

7. Node.js 事件循环

node.js--是单进程单线程应用程序,但是通过时间和回调支持并发,所以性能非常高。

node.js--每一个API都是异步的,并作为一个独立线程运行,使用异步函数调用,并处理并发。

node.js--基本上所有的事件机制都是用设计模式中观察者模式实现。

node.js--单线程类似进入一个while(true)的事件循环,直到没有事件观察者退出,每一个异步时间都生成一个时间观察者,如果有事件发生就调用该回调函数。

8. Node.js EventEmitter

node.js 所有的异步I/O操作在完成时都会发送一个时间到事件队列。

node.js 里有许多对象都会分发事件: 一个net.Server对象会在每次有新连接时分发一个事件,一个fs.readStream 对象会在文件被打开的时候发送出一个事件,所有这些产生时间的对象都是events.EventEmitter的实例

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

EventEmitter 的方法:

  •      addListener(event, listener) -- 为指定事件添加一个监听器到监听器数组的尾部。

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

  •      once(event, listener) -- 为指定事件注册一个单词监听器,即 监听器最多只会触发一次,触发后立刻解除该监听器。

  •       removeListener(event, lidtener) -- 移除指定事件的某个监听器,监听器必须是该事件已经注册过的监听器。

  •       removeAllListeners([event]) -- 移除所有事件的所有监听器,如果指定事件,则移除指定事件的所有监听器。

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

  •       listeners(event) -- 返回指定事件的监听器数组。

  •       emit(event, [arg1], [arg2] ,[…]) -- 按参照的顺序执行每一个监听器,如果事件有注册监听返回ture, 否则返回 false。

类方法:

     listenerCount(emitter, event) -- 返回指定时间的监听器数量。

事件:

  •      newListener --  该事件在添加新监听器时被触发。

  •      removeListener -- 从指定监听器数组中删除一个监听器,需要注意的是,此操作将会被改变处于被删监听器之后的那些监听器的索引。

error 事件:  EventEmitter  定义了一个特殊的事件error, 它包含了错误旳语义。 

 

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

具有某个实体功能的对象实现事件符合语义,事件的监听和发射应该是一个对象的方法。

其次js的对象机制是基于原型的,支持部分多重继承,继承EventEmitter不会打乱对象原有的继承关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值