Node.js入门知识
一、Nodejs认识
引入 required 模块 | 可以使用 require 指令来载入 Node.js 模块 |
创建服务器 | 服务器可以监听客户端的请求,类似于 Apache 、Nginx 等 HTTP 服务器 |
接收请求与响应请求 | 服务器很容易创建,客户端可以使用浏览器或终端发送 HTTP 请求,服务器接收请求后返回响应数据 |
function add(a, b) { return a + b } function mul(a, b) { return a * b } module.exports = { add, mul }
引入模块 | 使用 require 指令来载入 http 模块,并将实例化的 HTTP 赋值给变量 http var http = require("http"); |
创建服务器 | 使用 http.createServer() 方法创建服务器 ,并使用 listen 方法绑定 8888 端口。 函数通过 request, response 参数来接收和响应数据。 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);//指定监听端口为8888 // 终端打印如下信息 console.log('Server running at http://127.0.0.1:8888/'); |
二、NPM使用介绍
- 允许用户从NPM服务器下载别人编写的第三方包到本地使用。
- 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
- 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。
安装 install | 有两种: npm install express # 本地安装 npm install express -g # 全局安装 本地安装: 1. 将安装包放在 ./node_modules 下(运行 npm 命令时所在的目录), 如果没有 node_modules 目录,会在当前执行 npm 命令的目录下生成 2. 可以通过 require() 来引入本地安装的包。 全局安装: 1. 将安装包放在 /usr/local 下或者你 node 的安装目录。 2. 可以直接在命令行里使用。 可以使用$ npm list -g来查看所有全局安装的模块 如果要查看某个模块的版本号,可以使用命令 $ npm list grunt |
package.json | package.json 位于模块的目录下,用于定义包的属性
|
卸载 uninstall | $ npm uninstall express |
更新 | $ npm update express |
搜索 | $ npm search express |
创建模块 | 创建模块,package.json 文件是必不可少的 可以使用NPM生成package.json 文件 完成生成步骤后,发布模块 $ npm publish |
除此以外还有许多npm命令:
|
三、交互式解释器
-
读取 - 读取用户输入,解析输入了Javascript 数据结构并存储在内存中。
-
执行 - 执行输入的数据结构
-
打印 - 输出结果
-
循环 - 循环操作以上步骤直到用户两次按下 ctrl-c 按钮退出。
$ node >启动Node的终端,之后就可以输入间的表达式进行运算
简单的表达式运算 |
使用变量 变量声明需要使用 var 关键字,如果没有使用 var 关键字变量会直接打印出来。 |
多行表达式 支持输入多行表达式,这就有点类似 JavaScript |
下划线(_)变量 可以使用下划线(_)获取上一个表达式的运算结果 |
常用的命令:
|
四、Nodejs 回调函数
var fs = require("fs"); fs.readFile('input.txt', function (err, data) { if (err) return console.error(err); console.log(data.toString()); }); console.log("程序执行结束!");
五、Nodejs事件循环
// 引入 events 模块 var events = require('events'); // 创建 eventEmitter 对象 var eventEmitter = new events.EventEmitter(); // 绑定事件及事件的处理程序 eventEmitter.on('eventName', eventHandler); // 触发eventName事件 eventEmitter.emit('eventName');或:
// 引入 events 模块 var events = require('events'); // 创建 eventEmitter 对象 var eventEmitter = new events.EventEmitter(); // 创建事件处理程序 var connectHandler = function connected() { console.log('连接成功。'); // 触发 data_received 事件 eventEmitter.emit('data_received'); } // 绑定 connection 事件处理程序 eventEmitter.on('connection', connectHandler); // 使用匿名函数绑定 data_received 事件 eventEmitter.on('data_received', function(){ console.log('数据接收成功。'); }); // 触发 connection 事件 eventEmitter.emit('connection'); console.log("程序执行完毕。");从上面两段代码中可以看出,在nodejs语法中:
六、EventEmitter
//event.js 文件 var EventEmitter = require('events').EventEmitter; var event = new EventEmitter(); event.on('some_event', function() { console.log('some_event 事件触发'); }); setTimeout(function() { event.emit('some_event'); }, 1000); 执行结果如下一些方法
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。 |
var events = require('events'); var emitter = new events.EventEmitter(); emitter.emit('error');
大多数时候我们不会直接使用 EventEmitter,而是在对象中继承它。包括 fs、net、 http 在内的,只要是支持事件响应的核心模块都是 EventEmitter 的子类。