Node.js是一个能在服务器端运行JS的运行环境
Node有啥用
-
node中可以使用所有的JS内建对象
String, Number, Boolean, Math, Date ......
-
node可以在后台编写服务器(单线程服务器)
- 传统的服务器都是多线程的,每进来一个请求,就创建一个新的线程去处理请求
- node在处理请求的时候是单线程的,但是在其后台拥有一个I/O线程池
模块化
在node中,一个js文件就是一个模块
使用
require()
函数来引入外部的模块,require()
函数可以传递一个文件的路径作为参数,node会自动的根据该路径来引入外部模块-
使用
require()
函数引入模块以后,require()
函数会返回一个对象,该对象就代表这个引入的模块var model = require("./111.txt")
在node中,每一个js文件的js代码都被看做是是独立的运行在一个函数中,而不是我们平时理解的全局作用域。所以一个模块中的变量和函数在其他模块中无法访问,除非引入的模块主动暴露一些方法和属性
-
当node在执行模块中的代码时,node引擎会给模块的代码用一个函数包起来,此函数接收五个对象作为实参
function(exports, require, module, __filename, __dirname){ //模块代码 }
- exports:用于暴露变量或函数到模块外部
- require:用于引入外部模块
- module:代表当前模块本身,exports就是module的属性
- __filename:当前模块的完整路径
- __dirname:当前模块所在文件夹的完整路径
暴露
通过exports
对象向外部暴露,将需要暴露给外部的变量和方法设置为exports
的属性即可
exports.x = '我是x'
模块标识
一种找到指定模块的方式,例如通过require()
函数引入外部模块时,函数接收的路径就是一种模块标识
-
核心模块:由node引擎提供的模块
-
核心模块的标识就是该模块的名字
var fs = require("fs") //直接引入文件模块
-
-
文件模块:用户自己创建的模块
-
文件模块的标识就是文件路径(绝对路径 、相对路径)
var model = require("./111.txt")
-
global对象
一个在node中的全局对象,作用和浏览器里面的window
对象类似
在全局中创建的变量都会作为
global
的属性保存在全局中创建的函数都会作为
global
的方法保存