node的作用和应用
1、脱离浏览器运行JS
2、后台编写API
3、Webpack,gulp,Npm等等
4、中间层:服务器中负责IO读写中间层的服务器
node作为中间层的优势
- 性能:异步IO
- 处理数据
- 安全性
node的模块
- 全局模块(对象)
随时随地都能使用
process.env 环境变量
process.argv - 系统模块
使用require()引入 - 自定义模块
Node是C++写的,所以它有分配C++内存的能力
在nodejs顶层对象是global
在ecmascript中,部分node和js其实是一样的,比如数据类型的定义,语法结构,内置对象
在nodejs中,一个文件就是一个模块,每个模块都有自己的作用域
当我们在一个文件中声明的一个变量a,它并不是全局的,而是属于当前模块下
所以并不能通过global.a来访问到。
除非声明的时候使用 global.a来声明
· _filename : 返回当前模块文件被解析过后的绝对路径,该属性其实并非全局的,而是模块作用域下的
· _dirname:返回当前模块文件所在目录接下后的绝对路径,该属性也不是全局的,而是模块作用域下的
· propcess对象 是一个全局对象
可以在任何地方都能访问到它,通过这个对象提供的属性和方法,可以对当前运行的程序的进程进行访问和控制
· propcess.argv
- array 一组包含命令行参数的数组 第一个参数是“node”,第二个元素是.js文件的名称,接下来的元素是依次命令行传入的参数
这个参数在运行的时候传入
· propcess.execPath - 开启当前进程的绝对路径
· propcess.env - 返回用户环境信息
· propcess.pid - 返回当前进程的pid
· propcess.title - 返回当前进程的显示名称(getter/setter)
· propcess.arch - 返回CPU处理器架构
· propcess.exit - 推出
· propcess.kill - 向进程发送信息
· propcess.stidin、 stdout: 标准输入输出流(IO) - 标准输入设备
- 标准输出设备
- stdin和stdout 提供了操作输入数据和输出数据的方法,通常称作IO操作
模块加载机制
require(“adress” ) 引入模块
绝对路径/相对路径 相对路径必须./开头,否则会加载依赖的中的核心文件去
例如: let path = require(‘path’)
path.resolve(__dirname,‘index.js’) // 返回文件的绝路径
暴露模块中的变量
在一个模块中定义的变量想要在另外一个模块中的变量
1、将变量作为global对象的一个属性 不推荐
2、使用模块对象 (module),
在这个module对象下有一个子对象:exports对象。我们可以通过这个对象把一个模块中的局部变量提供访问
var b = 22222
module.exports.b = b
var b = require(’./hello2.js’)
console.log(b)
3、在模块作用,还有一个内置的模块对象,exports,它其实就是module.exports