1.nodejs的概念/好处

2.简单介绍

1.nodejs的组成

(1)引用required模块,可以用require指令来载入Node.js模块

(2)创建服务器,可以监听客户端的请求

(3)接收请求与响应请求,客户端可使用浏览器或者终端发送http请求,服务器接收请求后返回响应数据

2.创建应用

创建应用时首先使用require指令载入http模块,然后使用http.createServer()方法创建服务器

3.回调函数

nodejs的异步编程主要体现在回调上,node使用了大量的回调函数,所有的API都支持回调。

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

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

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

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

使用的是事件驱动模型,就是说一个web server接收到请求之后,当前的请求就被关闭,自己玩自己的,然后去进行下一个请求,这个请求处理完之后,会被放入队列之中,等队列排到最开始再输出,这个时候会有一个主循环(event loop)一直在监听着事件,当事件被处理完就会触发回调函数,返回队列中

4.eventEmmitter类

核心:事件触发与事件监听器功能的封装

var EventEmitter = require('events').EventEmitter;
var event = new EventEmitter();
// 逐层事件监听器,告诉服务器,我要开始准备监听这个叫some_event的事件了,on用于绑定事件函数
event.on('some_event', function() {
    console.log('some_event 事件触发');
});
setTimeout(function() {
    event.emit('some_event'); 
  // 开启监听器,事件被触发,执行的是on后面的那个回调函数
}, 1000);

除了on和emit之外的一些别的属性

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

(2)once(event, listener)为指定事件注册一个单次监听器,只触发一次监听,触发后监听器会立刻被解除

(3)removeListener(event, listener)移除指定事件的某个监听器(必须已被注册过的监听器)

5.Buffer(缓冲区)

因为js只有字符串数据类型,没有二进制数据类型,所以在处理流这种必须用到二进制数据的时候,nodejs定义了一个Buffer类,用来创建一个专门存放二进制数据的缓存区

6.Stream(流)

流式一个抽象接口,是有序而且有方向的数据集合(?),nodejs里面有四种流类型

(1)readable:可读(fs.createReadStream())

(2)writable:可写(fs.createWriteStream())

(3)duplex:可读可写(net.Socket)

(4)transform:操作被写入数据,然后读出数据(zlib.createDeflate())

7.模块系统

模块是node.js应用程序的基本组成部分,文件和模块是一一对应的

nodejs提供了exports和require两个对象,exports是模块公开的接口,require用于从外部获取一个模块的接口

nodejs存在四类模块(原生模块以及三种文件模块)

img

优先级最高的是从文件模块缓存中加载,然后是从原生模块加载,最后才是从文件中加载

8.http服务器

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.常用的API

1.全局变量

(1)_filename:当前正在执行的脚本的文件名,输出的是文件所在位置的绝对路径

(2)_dirname:当前执行脚本所在的目录

(3)process:用于描述当前nodejs进程状态的对象,提供与操作系统的简单接口,

Process一些常用的属性

1)stdout/stderr/stdin:标准输出流,标准错误流以及标准输入流

2)argvargv 属性返回一个数组,由命令行执行脚本时的各个参数组成。它的第一个成员总是node,第二个成员是脚本文件名,其余成员是脚本文件的参数。

3)execPath:返回执行当前脚本的Node二进制文件的绝对路径

4)env:返回一个对象,成员为当前shell的环境变量

5)config:一个包含用来编译当前 node 执行文件的 javascript 配置选项的对象。它与运行 ./configure 脚本生成的 "config.gypi" 文件相同

process一些常用方法

1)chdir(directory):改变当前工作进程的目录,如果操作失败抛出异常

2)cwd():返回当前进程的工作目录

3)nextTick(callback):一旦当前事件循环结束,调用回调函数

2.常用工具——util模块

(1)util.inherits(constructor, superConstructor)是一个实现对象间原型继承 的函数,只继承原型中定义的函数,而不会继承构造函数中创造的属性

(2)util.inspect(object,[showHidden],[depth],[colors])是一个将任意对象转换 为字符串的方法

3.文件系统(fs)

文件系统的方法中均有同步和异步两个版本,异步的方法函数最后一个参数是回调函数,回调函数的第一个参数包含了错误信息,建议用异步,因为性能更高,速度更快,而且没有阻塞。

(1)fs.open(path,flags,[,mode], callback):异步模式下打开文件的语法格式

path - 文件的路径。

flags - 文件打开的行为,指定文件的读写。

mode - 设置文件模式(权限),文件创建默认权限为 0666(可读,可写)。

callback - 回调函数,带有两个参数如:callback(err, fd)。

(2)fs.stat(path, callback):异步模式下获取文件信息的语法格式

(3)fs.writeFile(filename, data[, options], callback),异步模式下写入文件

(4)fs.read(fd, buffer, offset, length, position, callback)异步模式下读取文件的语法格式

(5)fs.close(fd, callback)

(6)fs.ftruncate(fd, len, callback)异步模式狭隘截取文件的语法格式

(7)fs.unlink(path, callback)删除文件

(8)fs.mkdir(path[, mode], callback)创建目录

(9)fs.readdir(path, callback)读取目录

(10)fs.rmdir(path, callback)删除目录

4.其他知识

1.GET/POST请求
var http = require('http');
var url = require('url');
var util = require('util');

http.createServer(function(req, res){
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end(util.inspect(url.parse(req.url, true))); // parse函数提供了get请求的参数解析方法
}).listen(3000);
var http = require('http');
var querystring = require('querystring');
var util = require('util');

http.createServer(function(req, res){
    var post = '';     //定义了一个post变量,用于暂存请求体的信息

    req.on('data', function(chunk){    //通过req的data事件监听函数,每当接受到请求体的数据,就累加到post变量中
        post += chunk;
    });

    req.on('end', function(){    //在end事件触发后,通过querystring.parse将post解析为真正的POST请求格式,然后向客户端返回。
        post = querystring.parse(post);
        res.end(util.inspect(post));
    });
}).listen(3000);

http.ServerRequest并没有一个属性内容为请求体,原因是等待请求体传输可能是一件耗时的工作,恶意的POST请求会大大消耗服务器的资源,所有node.js默认是不会解析请求体的, 当你需要的时候,手动来做

2.web模块

web服务器指的是驻留在因特网上某种类型计算机的程序,基本功能是提供web信息浏览服务。常用的web服务器是Apache,Nginx,IIS

http 模块主要用于搭建 HTTP 服务端和客户端,使用 HTTP 服务器或客户端功能必须调用 http 模块


just小千
10 声望3 粉丝

« 上一篇
初学svg