简介
node.js是一个让js运行在服务器端的开发平台,它不是一种独立的语言,它是一个js的执行环境。
特点
单线程、非阻塞I/O、事件驱动,其实这三个特点说的都是事件循环。
- 事件循环:js是单线程的,所有任务都在主线程上执行,形成一个执行栈,主线程之外还有一个任务队列,系统会把异步任务还有计时器放到任务队列中,然后继续执行主线程的任务,直到主线程中任务都执行完了,再将任务队列的任务出队,加入到执行栈中执行,这种运行机制就是事件循环。
适用场景
node.js适合大量的并发I/O,而不善于大量计算,也适合websocket等长连接的实时交互程序。
核心API
global
在浏览器js中,window是全局对象,而node中的全局对象是global,所有全局变量都是global的属性。
__filename 指向当前运行的脚本文件名
__dirname 当前执行脚本的所在目录
process
process是一个全局变量,是global对象的属性,他用于描述当前node进程状态的对象。
Process.nextTick(callback):是为事件循环设置一项任务,node.js会在下次事件循环中调用。
process.stdout:用来控制标准输出,就是在命令行窗口向用户显示内容,process.stdout.write
等同于console.log。
process.argv:返回命令行脚本的各个参数组成的数组。
process.env:指向当前shell的环境变量,比如process.env.NODE_ENV,用来判断当前node环境变量,一般判断production还是dev。
child process
child_process模块用于新建子进程,
exec():方法用于执行bash命令,参数为要执行的shell命令字符串。
let exec = require('child_process').exec;
exec('npm run dev',()=>{
// do something
})
events.EventEmitter
EventEmitter的核心就是事件发射与事件监听器功能的封装。
let events = require('events');
let emitter = new events.EventEmitter();
//为指定事件注册一个监听器,事件名和回调函数
emitter.on('abcEvent',(a,b)=>{});
emitter.on('abcEvent',(a,b)=>{});
//触发所有abcEvent事件,后面是传递的参数
emitter.emit('abcEvent','1','2');
//为指定事件注册一个单次监听器,即只会触发一次
emitter.once('abcEvent','1','2');
util
Util.inspect:类似json.stringify
util.inherits(constructor, superConstructor):是一个实现对象间的原型继承的函数.
fs
fs模块是文件操作的封装。
var fs = require('fs');
//读取abc.txt,该函数为异步,回调中的data就是读取的文件内容,未声明encoding则为buffer
fs.readFile('abc.txt',(err,data)=>{
console.log(data)
})
//为读取文件的同步版本
fs.readFileSync()
http
let http = require('http');
http.createServer((req,res)=>{
//do somethings
}).listen(8080,'127.0.0.1');
上面代码用于创建一个服务器,监听本机的8080端口。
request():方法用于发出http请求
http.request(options,callback)
options对象可以设置如下属性。
hostname:http请求所发往的域名或者ip地址,默认是localhost
port:远程服务器的端口,默认是80
method:指定http请求的方法,格式为字符串,默认为get
path:指定http请求的路径,默认路径(/)。
PM2
pm2:可以让用户跟简单的部署多进程的node应用,且守护进程
// app.js
let http = require('http');
http.createServer((req,res)=>{
res.writeHead(200);
res.end("hello world");
}).listen(8080);
上面代码是建立一个web服务器,然后用pm2启动这段代码
pm2 start app.js -i 4
启动服务器,并且新建4个worker进程,如果i的数值是0,那么当前机器有几个cpu内核,pm2就会启动几个worker进程。
如果worker进程由于某种原因挂掉了,会立刻重启该进程。
网友评论