概述:
Node.js发布于2009年5月,由Ryan Dahl开发,是一个基于Chrome V8引擎的JavaScript运行环境,使用了一个事件驱动、非阻塞式I/O模型,让JavaScript 运行在服务端的开发平台,它让JavaScript成为与PHP、Python、Perl、Ruby等服务端语言平起平坐的脚本语言。
概述起来就是:nodejs是一个基于Chrome v8引擎设计的单线程的基于事件驱动的非阻塞I/O模型的的一个js运行环境。
特点:
1、单线程 : node.js的主线程也就是程序员写的js代码是Chrome V8引擎执行的,但它提供的异步函数是由底层c/c++语言来开启线程执行的。
2、非阻塞的I/O模型: Node.js 中使用事件回调的方式来解决阻塞 I/O 的情况,避免了阻塞 I/O 所需的等待。
3、基于事件驱动(回调函数): node.js把任务添加到事件池(event-loop),让异步任务去子线程中执行 , 然后注册一个事件 ,任务执行完毕以后 就回到主线程执行回调函数
4、模块化: node.js把功能按照模块来封装, 方便扩展 、维护管理, 更有利于开发大型项目
优缺点:
优点: 使用事件驱动、非阻塞I/O模型,异步编程,性能好速度快,资源占用小等
缺点: 单线程,一个进程崩掉,整个服务停止;安全性不高
概念:nodejs中的模块化是指将每个js文件会被认为单独一个的模块。模块之间是互相不可见的。如果一个模块需要使用另一个模块,那么需要通过指定语法来引入要使用的模块
nodejs运行时,要引入第三方js文件就使用 require() ;也可以使用ES6中的语法 import
var 变量名 = require("要引入的文件")
nodejs导出文件使用 module.exports
// 导出
module.exports = {
}
nodejs中有三种模块:内置模块、第三方模块和自定义模块
内置模块:不需要单独下载,node.js安装时就已下好,使用时直接用require引入
var http = require("http")
var fs = require("fs")
var url = require("url")
var querystring = require("querystring")
第三方模块:需要下载使用,下载指令:npm i 下载的模块名
var mime = require("mime")
自定义模块: 自己定义的js功能模块,用 module.exports 导出;
var myquerystring = require("./myquerystring.js")
node.js执行require() 时,经历的过程:
1、先去当前项目中的node_modules文件夹中找要引入的文件夹 中的package.json中main字段对应的路径 然后引入
2、如果没有就去nodejs的安装包中的全局安装路径中找
3、如果还是没有找到 就去核心库中找