1.NodeJS的基本简介:

1、通过Node可以让js代码在服务器端中执行;
2、NodeJS其实是对ES标准一个实现,同时Node也是一个JS引擎(安装Node这个程序就有)(Node本身就可以执行JS代码);
3、Node仅仅只对ES标准进行了实现,所以在NodeJS中不包含DOM 和 BOM, 当然也不能操作DOM,BOM;
4、Node中可以使用所有的JS内建对象String Number Boolean Math Date RegExp Function Object Array,另外console,setTimeout() setInterval()也是可以使用的;
5、传统的服务器都是多线程的,但是Node的服务器单线程的;
6、Node可以在后台来编写服务器,并且要注意的Node编写服务器全都是单线程的服务器;

2.模块化

2.1模块化介绍:

简单地说,模块化就是有组织地把一个大文件(大功能) 拆分成多个独立并且又互相依赖的小模块
每个小模块的内部成员紧密结合,外部不能引用(高内聚,且避免了全局污染), 小模块会主动向外部暴露可以使用的接口(低偶合);
在Node中:一个文件就是一个模块(这个文件可能是 JavaScript 代码、JSON 或者编译过的 C/C++ 扩展等等)

2.2模块化的好处:

  1. 避免命名冲突(减少命名空间污染)
  2. 更好的分离, 按需加载
  3. 更高复用性
  4. 高可维护性

    2.3模块化的几种处理规范:

    1)ES6规范
    ES6以后新加模块化规范
    2)CommonJS规范
    Node.js遵循的模块化规范
    3)AMD规范
    RequireJS遵循的模块化规范
    4)CMD规范
    sea.js遵循的模块化规范

    3、模块化基本使用

    ```javascript // !addMoule模块(不能在模块的外面使用内部东西,需要暴露才行) function add(n1, n2){ return n1 + n2 } console.log(“addModule模块执行了。。。。”);

// 往exports添加要暴露的内容 // 每一个模块都有一个exports对象,并且会暴露这个对象 exports.add = add; exports.showTime = “表现时刻”;

暴露方式: {

方式一、exports.add = add;

方式二、 // !可以module.exports往外面暴露一个整体 // 这种方式是直接改变module上面的exports对象 // 模块中暴露的其实就是module上的exports对象 // module表示的就是当前模块本身 module.exports = { add, showTime: “表现时刻” } }

// !index模块 index.js // 路径的后缀js可以不写 // 引入模块的时候,模块内部也会执行 // 模块有文件模块(自定义模块) 和 核心模块; //而自定义模块在引入时,路径前面必需要加./或者../ const {add, showTime} = require(‘./addmodule’) console.log(add(10, 20)); console.log(showTime);

  1. <a name="BGkVq"></a>
  2. # 4、模块详情
  3. 模块本身其实就是一个函数
  4. ```javascript
  5. // 模块本身其实就是一个函数
  6. // arguments.callee表示的就是当前函数本身
  7. // console.log(arguments)
  8. // console.log(arguments.callee.toString())
  9. 模块本身其实就是一个函数, 函数体如下:
  10. function (exports, require, module, __filename, __dirname){}
  11. 有五个参数如下:
  12. exports:传入的实参为module.exports(PS:这个形参的值其实就是module对象上的exports属性值,exports属性值本向也是一个对象)
  13. require:传入的实参为一个函数(PS:可以通过这个require函数引入其它模块)
  14. module:传入的实参是module对象(PS:这个对象表示当前模块本身,另外exports只是它身上的一个小属性,你可以打印它看下,会看到一些有意思的东西)
  15. __filename:传入的就是当前模块的路径
  16. __dirname:传入的就是当前模块的目录路径
  17. console.log("当前执行文件的绝对路径:", __filename);
  18. console.log("当前执行文件的绝对目录:", __dirname);
  19. /*
  20. 注意:在模块中向外暴露内容时
  21. 可以使用 module.exports = ...; (比如一个函数,一个对象等)
  22. 也可以使用 exports.属性名 = 属性值;
  23. 但是不能 exports = ...; 因为这样并不能向外暴露内容
  24. */

5、核心模块与文件模块

模块分两种:核心模块 、 文件模块(自定义模块):

核心模块 : 是NodeJS本身就有的,Node自带的模块
在引入核心模块时,路径前面不能添加./ 或者 ../require(‘path’)

文件模块 : 就是我们编码自定义的模块
在引入文件模块时,路径前面需要添加./ 或者 ../require(‘./addmodule’)

6、全局对象

global和window差不多 ,都是全局对象(在node.js里面global是全局对象)

  1. // 给全局对象上添加一个数据
  2. // 全局对象上的数据,在所有地方都可以访问
  3. global.dogName = "小明"

7、包 (小案例NodeJS(day02))

注意:
包文件夹下面需要一个package.json文件,
可以通过npm init 或者 npm init -y来自动生成这个package.json文件

7.1.包的简介:

包是在模块基础上更深一步的抽象;
包是 模块 和 其它资源 组合起来的一个文件夹
可以把一个包看作是 模块 和 其它资源 组合起来形成的 独立作用域


7.2.包的目的或者作用:

是方便分发和推广基于 CommonJS 规范实现的 应用程序 或 类库;
(PS:NodeJS模块化是基于CommonJS 规范的)


7.3.包的特征:
在CommonJS规范中包应该具有以下特征:

  1. package.json 必须在包的顶层目录下;(这个json文件必需要有,且名字要为package)
  2. 二进制文件应该在 bin 目录下;
  3. JavaScript 代码应该在 lib 目录下;
  4. 文档应该在 doc 目录下;
  5. 单元测试应该在 test 目录下。

PS:在NodeJS中对包的要求并没有这么严格,只要在包中顶层目录下有 package.json,
并符合一些规范即可;bin,lib,doc,test这四个目录是可选的(但package.json必需要有

7.4.包与模块的关系:

在NodeJS中,一个文件就是一个模块,这个文件可能是 JavaScript 代码、JSON 或者编译过的 C/C++ 扩展等等;
但是一个模块也可以是一个文件夹,你可以把这样的模块认为是一个特殊的模块,也可以叫做它为”包“
在一个包中可以包含其它的模块 或者 其它资源

8.http核心模块

8.1.1.基本使用

  1. // !引入http核心模块
  2. const http = require('http')
  3. // !创建一个服务端对象
  4. const app = http.createServer(function(request, response){
  5. console.log("有个小伙子发了请求.....");
  6. // 设置响应头,告诉浏览器使用utf8来解释响应内容
  7. response.writeHead(200, {
  8. "Content-Type": 'text/html; charset=utf-8'
  9. })
  10. // response 响应对象(通过它给浏览器响应数据)
  11. response.write("<h1 style='color: red'>小甜甜</h1>")
  12. response.write("<h1 style='color: red'>小可爱</h1>")
  13. response.end("<h1>OK</h1>") // 响应并且结束
  14. })
  15. // !监听启动的端口(注意默认的ip是本地ip,就是localhost)
  16. app.listen(3000, function(err){
  17. console.log("服务启动成功......");
  18. })

8.2.request事件

  1. const http = require('http')
  2. const app = http.createServer()
  3. // !request事件,接收到请求时,就会触发
  4. app.on('request', function(request, response){
  5. console.log("request事件触发了。。。");
  6. response.end("<h1>OK</h1>");
  7. })
  8. // !当前客户端连接到服务时,就会触发
  9. app.on('connection', function(socket){
  10. console.log('connection事件执行了....', socket);
  11. })
  12. app.listen(3000, function(){
  13. console.log("启动成功....");
  14. })

8.3.3.获取请求信息

  1. const http = require('http')
  2. const app = http.createServer()
  3. app.on('request', function(request, response){
  4. // response响应对象;给浏览器响应数据,就使用它
  5. // request请求对象;存放着浏览器请求发送的数据,
  6. //通过它获取请求相关的信息(比如,请求的方式,数据,路径等等)
  7. console.log("请求方式:", request.method);
  8. console.log("请求路径:", request.url);
  9. console.log("请求头:", request.headers);
  10. response.end("<h1>OK</h1>");
  11. })
  12. app.listen(3000, function(){
  13. console.log("启动成功....");
  14. })

9.、npm简介与使用

npm常用命令:

npm -v 查看npm的版本
npm version 查看所有模块的版本
npm search 包名 查找包
npm view 包名 versions (查看包的所有版本号)
npm install / i 包名 (安装包)
npm install 包名 —save (安装包并添加到依赖中,此依赖不仅开发环境能使用,生产环境也能使用)
npm install 包名 —save-dev (安装包并添加到依赖中,此只在开发环境能使用)
npm [remove|uninstall] / r 包名 (删除包)
npm install 包名 -g (全局安装包,全局安装的包一般都是一些工具相关的包)
npm install (下载项目package.json文件中所有依赖的包)

初始化

下载 express

安装包:
安装包前,对项目进行初始化,生成package.json文件
安装包时,会在当前执行安装命令的路径下,创建一个node_modules文件夹,
下载的第三方包就会存放到这个文件夹下面,
并且在当前项目的package.json文件中生成包的版本信息