教程链接:
https://www.runoob.com/nodejs/nodejs-tutorial.html
Node.js就是运行在服务端的Javascript

新建一个文件夹用于实践
在文件夹中打开Git

  • 输入node -v可以查看目前Node.js的版本
  • 输入node可以进入命令交互模式
  • 在里面输入console.log("Hello World");可以输出“Hello World”
  • 想要运行某js文件,在Git中输入
    node xxx.js
    即可

使用Node.js时,不仅仅在实现一个应用,同时还实现了整个HTTP服务器

Node.js组成:
1.引入required模块
可以使用require指令来载入Node.js模块
2.创建服务器
3.接收请求与响应请求

使用require指令来载入http模块,并将实例化的HTTP赋值给变量http
var http = require("http");

http.createServer()
创建服务器

代码来自菜鸟教程

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/');  

分析:第一句引入require命令不说了,第二部通过http.createServer()创建服务器,.listen()用于绑定端口

效果:
实现了一个在端口8888上的服务器,并且进入时页面上打印着Hello World
服务器图片

NPM

可以使用npm命令安装模块
npm install <Module Name>
example:
用npm安装模块express
npm install express
安装过后的包在工程目录下的node_modules目录中

卸载模块
npm uninstall express
更新模块
npm update express
搜索模块
npm search express

REPL(交互式解释器)

在cmd或git中输入node即可开启RDPL
下划线变量
可以使用_下划线来获取上一个表达式的运算结果

> x + y
30
> var sum = _
undefined
> console.log(sum)
30  

可以看出sum从下划线中获取到了上一个表达式x+y的值30

^C可以退出REPL

回调函数

Node.js异步编程的直接体现就是回调
回调函数一般作为函数的最后一个参数出现

回调函数在完成任务后就会被调用,Node使用大量的回调函数,其所有API都支持回调函数
作用(来自菜鸟教程):可以一边读取文件一边执行其他命令,在文件读取完成后,将文件内容作为回调函数的参数返回,这样在执行代码时就没有阻塞或者等待文件I/0操作
大大提高了Node.js的性能
可以处理大量的并发请求

事件循环

Node.js是单进程单线程1应用程序
单线程进入类似一个while(true)的事件循环,知道没有事件观察者退出
每个异步事件都生成一个时间观察者,若有事件发生,就调用该回调函数

事件驱动程序
Node.js使用事件驱动模型,当web server接收到请求,就把它关闭然后进行处理,去服务下一个web请求
当这个请求完成,它被放回处理队列,当到达队列开头,这个结果被返回给用户

引入events模块
var events = require('events');

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

创建eventEmitter对象
var eventEmitter = new events.EventEmitter();
当EventEmitter对象实例化发生错误会触发error事件
添加新的监视器的时候会触发newListener事件
监视器移除时,会触发removeListener事件

绑定事件处理程序
eventEmitter.on('eventName',eventHandler);
其中的eventHandler是一个自定义函数,当事件被调用之后该函数被调用,如果你编写的函数是console.log("某些东西");的话,那么当事件被调用时,将会在控制台上输出你想要输出的某些东西
EvenEmitter的每个事件由一个事件名和若干个参数组成,当事件触发时,注册到这个事件的事件监听器被依次调用,时间参数作为回调函数参数传递

获取'connection'事件监听器个数
var eventListeners = evenEmitter.listenerCount('connection');

移除绑定的函数
eventEmitter.removeListener('connection',listener1);

触发事件
eventEmitter.emit('eventName');

Q.E.D.

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议