NodeJS

发布于 2020-11-08  318 次阅读


综述

node.js 简单的来说就是运行在服务端的 JavaScript
node.js 是基于 chrome javascript 运行时建立的一个平台
node.js 是一个事件驱动 I/O 服务端 JavaSCript 环境,基于 google 的 v8 引擎。

nodejs

node.js 应用由以下三个模块组成:

  • require 引入
  • 创建服务器
  • 接收请求与响应请求
var http = require('http');
http.createServer(function (request,response){
    // 发送 http 头
    response.writeHead(200,{'Content-Type':'text/plain'});
    // 发送响应数据
    response.end('Hello World');
}).listen(8888);

console.log('Server running at http://127.0.0.1:8888');

npm

npm 是 nodejs 的包管理工具,功能如下:

  • 允许用户从 npm 服务器下载别人编写的第三方包到本地使用
  • 允许用户从 npm 服务器下载并安装别人编写的命令行程序到本地使用
  • 允许用户将自己编写的包或命令行程序上传到 npm 服务器供他人使用

指令

// 版本
npm -V

// 升级
npm install npm -g

// 使用淘宝镜像源 - 此时可以使用 cnpm 替换 npm
npm install -g cnpm --registry=https://registry.npm.taobao.org

// 安装模块
npm install <module name>

// 全局安装 - 将包安装在 node 的安装目录,命令行可直接使用
npm install <module name> -g

// 本地安装 - 安装在 命令目录下 的 node_modules 目录下
npm install <module name>

// 查看安装消息
npm list -g

// 查看模块
npm list <module name>

// 卸载模块
npm uninstall <module name>

// 更新模块
npm update <module name>

// 搜索模块
npm search <module name>

// 创建模块
npm init

// npm 资源库注册 - 用用户名和邮箱
npm adduser

// 发布模块
npm publish

// 清空 npm 本地缓存
npm cache clear

// 撤销发布的版本
npm unpublish <module name>@<version>

node.js REPL - 交互式解释器

REPL - read eval print loop
类似于 shell/terminal
node.js 自带了 交互式解释器,有以下功能:

  • 读取 - 读取用户输入
  • 执行 - 执行输入的数据结构
  • 打印 - 输出结果
  • 循环 - 直到 ctrl - c 退出

类似于 python 执行

详细内容

变量

var 声明变量

var y = 10
console.log(y)

_ 可以使用下划线取上一个表达式的运算结果

node.js 回调函数

node.js 异步编程的直接体现就是回调
回调函数在完成任务后就会被调用, node 的所有 api 都支持回调函数
回调函数一般作为函数的最后一个参数出现

function foo1(name,age,callback){}
function foo2(value,cb1,cb2){}

阻塞代码实例:

var fs = require("fs");
var data = fs.readFileSync('input.txt');
console.log(data.toString());
console.log('end')

非阻塞代码:

var fs = require("fs");
fs.readFile('input.txt',function(err,data){
    if (err) return console.error(err);
    console.log(data.toString());
});
console.log('end');

node.js 事件循环

node.js 是单进程单线程应用程序,但是由于 v8 引擎提供的异步执行回调接口,
因此这些接口可以处理大量的并发
node.js 基本所有的事件机制都是用设计模式中的观察者模式实现
node.js 单线程类似进入一个 while(true) 的事件循环,直到没有事件观察者退出,
每一个异步事件都生成一个事件观察者,如果有事件发生就调用该回调函数。

node.js 事件驱动程序

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

var events = require('events');
var event_emitter = new events.EventEmitter();
event_emitter.on('eventName',eventHandler);
event_emitter.emit('eventName');
var events = require('events');
var event_emitter = new events.EventEmitter();
var connect_handler = function connected(){
    console.log('connected');
    event_emitter.emit('data_received');
}

event_emitter.on('connection',connect_handler);
event_emitter.on('data_received',function(){
    console.log('data received');
});

event_emitter.emit('connection');

console.log('end');

朝闻道,夕死可矣