一、Node.js简介
1.Node.js是一个能够在服务器端运行JavaScript的开放源代码、跨平台JavaScript运行环境。
2.Node采用Google开发的V8引擎运行js代码,使用事件驱动、非阻塞和异步I/O模型等技术来提高性能,可优化应用程序的传输量和规模。
3.Node大部分基本模块都用JavaScript编写。在Node出现之前,JS通常作为客户端程序设计语言使用,以JS写出的程序常在用户的浏览器上运行。
4.Node主要用于编写像Web服务器一样的网络应用,这和PHP和Python是类似的。但是Node与其他语言最大的不同之处在于,PHP等语言是阻塞的而Node是非阻塞的。
5.Node是事件驱动的。开发者可以在不使用线程的情况下开发出一个能够承载高并发的服务器。其他服务器端语言难以开发高并发应用,而且即使开发出来,性能也不尽人意。
6.Node.js允许通过JS和一系列模块来编写服务器端应用和网络
相关的应用。
7.核心模块包括文件系统I/O、网络(HTTP、TCP、UDP、DNS、TLS/SSL等)、二进制数据流、加密算法、数据流等等。Node模块的API形式简单,降低了编程的复杂度。
8.使用框架可以加速开发。常用的框架有Express.js、Socket.IO和Connect等。Node.js的程序可以在Microsoft Windows、Linux、Unix、Mac OS X等服务器上运行。
9.Node.js也可以使用CoffeeScript、TypeScript、Dart语言,以及其他能够编译成JavaScript的语言编程
二、Node用途
- Web服务API,比如REST
- 实时多人游戏
- 后端的Web服务,例如跨域、服务器端的请求
- 基于Web的应用
- 多客户端的通信,如即时通信
三、安装Node.js
对应的下载地址 https://nodejs.org/dist/ 参看需要下载的版本,进行下载,然后就是一路安装,选择自己需要安装的目录,直到安装完成,在DOS窗口可以查看是否安装完成 输入 “node -v” ,如果输出对应的版本号证明安装完成。
四、Node目录结构
五、CommonJS规范
ECMAScript标准的缺陷
1、没有模块系统
2、没有标准接口
3、缺乏管理系统
4、缺乏管理系统
CommonJS规范的提出,主要是为了弥补当前JavaScript没有模块化标准的缺陷
CommonJS规范为JS指定了一个美好的愿景,希望JS能够在任何地方运行
CommonJS对模块的定义十分简单:
– 模块引用
– 模块定义
– 模块标识
模块化
1、一个xxx.js文件就是一个模块
/**
* 模块化
* -Node中,一个js文件就是一个模块
* -Node中,每一个js文件中的js代码都是独立运行在一个函数中
* 而不是全局作用域,所以一个模块中的变量和函数在其他模块中无法访问
*/
console.log("我是一个模块");
2、模块引用
02.module.js就是上面打印的一句话。
/**
* 引入其他模块
* 在Node中,通过require()函数来引入外部的模块
* require()可以传入一个文件的路径作为参数,node将自动根据该路径来引入外部模块
* 这里路径,如果使用相对路径,必须以.或..开头
* 02.module.js是和当前js文件在相同的文件夹下的模块,所以以./开头
*/
require("./02.module.js");
向外暴露对应的属性和方法供其他模块使用
02_module.js文件中增加属性和方法
/**
*向外部暴露属性或方法
*-Node 中,每一个js文件中的js代码都是独立运行在一个函数中
* 而不是全局作用域,所以一个模块中的变量和函数在其他模块中无法访问
* 我们可以通过exports 来向外部暴露变量和方法
* 只需要将需要暴露给外部的变量或方法设置为exports的属性即可
*/
exports.x = "我是02module.js";
//暴露函数
exports.fun = function () {
};
03_module.js模块中引入并使用
/**
* 引入其他模块
* 使用require()引入模块后,该函数会返回一个对象,这个对象代表的是引入的模块
*/
var md = require("./02.module.js");
console.log(md.x)
小练习
/**
* 定义一个模块 math
* 在该模块中提供两个函数
* add(a , b) //求两个数的和
* mul(a , b) //求两个数的积
*/
exports.add = function (a ,b){
return a + b;
};
exports.mul = function (a ,b) {
return a * b;
};
03_module.js引入math模块
var math = require("./math");
console.log(math.add(12,33));
模块标示
/**
* 我们使用require()引入外部模块时,使用的就是模块标识
* 我们可以通过模块标识来找到制定模块
* -模块分成两大类
* 核心模块
* - 由node引擎提供的模块
* - 核心模块的标识就是,模块的名字
* 例如:文件模块
* var fs = require("fs");
* 文件模块
* - 由用户创建的模块
* - 文件模块的标识就是文件的路径(绝对路径,相对路径)
* 相对路径使用 . 或 ..开头
*/
全局变量
/**
* 在node中有一个全局对象global,它的作用和网页中window类似
* 在全局中创建的变量都会作为global的属性保存
* 在全局中创建的函数都会作为global的方法保存
*
* a = 10 这样的定义是全局变量
*
* 当node在执行模块中的代码时,它会首先在代码的最顶部,添加如下代码
* function (exports, require, module, __filename, __dirname) {
* 在代码最底部添加如下代码
* }
* 实际上模块中的代码都是包装在一个函数中执行的,并且在函数执行时,同事传递进了5个实参
* exports
* -该对象用来将变量或函数暴露到外部
* require
* - 函数,用来引入外部的模块
* module
* - module 代表的是当前模块本身
* - exports 就是module的属性
* - 即可以使用 exports导出,也可以使用module.exports 导出
* filename
* - D:\Vue_WorkSpace\Nodejs01\01.node\04.module.js
* 当前模块的完整路径
* dirname
* - D:\Vue_WorkSpace\Nodejs01\01.node
* 当前模块所在文件夹完整路径
*/
//局部变量
var a = 10;
// console.log(global.a);
console.log(__dirname);