node

作者: Liberty寒风 | 来源:发表于2017-04-13 17:49 被阅读0次

简介

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进程由于某种原因挂掉了,会立刻重启该进程。

相关文章

网友评论

      本文标题:node

      本文链接:https://www.haomeiwen.com/subject/gstiattx.html