一、Node.js简介
1. 关于JavaScript js
什么是JavaScript?
- JavaScript是一门脚本语言 应对js有初步了解
- 一般运行在浏览器中,用来做客户端的页面交互
JavaScript的运行环境?
-
一般我们说在浏览器中运行JavaScript
-
浏览器是很复杂的一个东西
-
只有几个大公司有能力开发
-
准确的说,是由浏览器内核中的JS引擎运行JavaScript
-
浏览器的功能 作用,主要有两个:
a.请求一个HTTP地址:将一个URL地址封装成一个请求报文
b.解析服务器返回的响应报文:渲染HTML(渲染引擎)、渲染CSS、渲染IMAGE、执行JavaScript(JS引擎)
浏览器中的JavaScript可以做什么?
- DOM操作(DOM元素的获取和更新、注册事件等)document.
- BOM操作(页面跳转、历史记录、弹窗等)
- ECMAScript
- AJAX/跨域
浏览器中的JavaScript不可以做什么?
- 文件操作
- 数据库操作
- 获取操作系统信息
JavaScript只能运行在浏览器中吗?
- 不是,只要有JS引擎就可以运行JavaScript
- Node.js中就包含了一个JS引擎,可以运行JavaScript
2. 关于Node.js
Node.js(简称为Node)不是一门语言,也不是一个JavaScript框架,也没有一个叫node.js的文件(很难理解)
Node.js 是一个可以让JavaScript在服务器端运行的系统环境,即运行JavaScript不再依赖于浏览器(类似虚拟机)
Node.js 是一个基于Chrome的JS引擎(V8)所开发的软件程序,可以执行ECMAScript,但不支持DOM和BOM操作
Node 提供大量API工具库,使JavaScript可以完成更多功能,如IO操作、数据库操作、获取系统资源等。
3. Node.js作用
开发Web应用程序
- 开发动态网站
- 开发提供数据的服务端API
前端开发工具的基础
- 许多前端开发工具都是基于Node平台
二、Node环境搭建
1. 安装Node
node官网:nodejs.org
node中文网:nodejs.cn
直接执行软件包进行安装即可,安装完成后打开控制台(cmd),执行命令 node -v 查看安装版本即可
2. REPL环境
Node.js提供了一个交互式运行环境,即REPL ,在命令行窗口中,输入node命令并按下回车键,即可进入REPL运行环境
在REPL运行环境中,我们可以完成:JavaScript代码的输入、解释、执行、结果输出等操作。
退出REPL环境:连续按两下ctrl+c
3. 基本使用
在命令行中执行.js文件: node js文件路径
示例:
- 处理HTTP请求并响应:
var http = require('http');
//respose 表示答应,返回给客户端
var server =http.createServer(function(request,response){
})
- 用户登陆
三、模块化
1. 简介
模块化是指将一个复杂的项目按照一定的规则拆分成一个个模块,进行组合使用,完成项目的开发
- 模块的内部对使用者来说是透明的,在模块内部会进行成员的导出,向外暴露接口
- 使用者在使用时加载对应的模块,并调用模块提供的功能即可
- 方便代码的分层开发,保证每个功能模块的职能单一
- 项目开发时会使用到许多模块,模块间可能会存在依赖关系
Node使用模块化的方式组织代码结构:
- 一个模块可以是一个独立文件,也可以是一个文件夹,但都需要符合特定的要求
- 模块中提供的数据和功能,需要进行导出才能被外部所使用
2. 定义模块并导出
2.1 文件模块
独立文件模块有三种形式:
-
.js文件模块,使用js语法方式进行定义,并通过module.exports或者exports进行模块功能导出 -
.json文件模块,使用json对象定义数据,当通过require导入模块时,会自动导出定义的json数据 -
.node文件模块,使用node.js编译后的二进制文件,不能自行定义
在Node.js环境中使用module.exports或 exports进行模块的导出:
-
module 与 exports 都是Node.js中的全局对象
-
module对象
Node内部提供一个Module构造函数,属性如下:
Module { id: '.', // 模块的标识符,主模块的id属性值为“.”,其他模块的id属性值为该模块文件的绝对路径 exports: {}, // 模块的导出对象,为require加载时提供返回结果 parent: null, // 当前模块的父模块 filename: '', // 当前模块的文件名称和存储路径 loaded: false, // 表示模块是否加载完成 children: [], // 当前模块的子模块 paths:[] // 加载模块文件的路径顺序 }所有模块都是Module的实例,载入一个模块就是构建一个Module实例
-
exports对象
该对象实际上就是 module.exports 对象,用来简单模块导出操作
2.2 文件夹模块
文件夹模块,要求根目录下必须存在index.js 或 package.json文件,即必须有入口文件
关于package.json文件,格式如下:
{
"name": "模块名",
"version": "模块版本",
"description": "模块描述",
"main": "模块的入口文件",
"scripts": {
"命令名": "模块的执行命令"
},
"keywords": ["模块的关键字"],
"author": "模块的作者",
"license": "模块的开源协议,如:ISC、"
}
在Node.js环境中,存在package.json文件的文件夹,其实是一个独立的Node项目,该文件用于定义项目的相关信息
-
可以使用
npm( node package manager ) 命令,自动生成package.json文件语法:
npm init或npm init --yes
3. 导入模块并使用
在Node.js环境中使用 require(模块路径|模块名) 进行模块的加载导入:
- 省略后缀名时模块的查找顺序: .js ——> .json ——> .node
- 加载模块时的查找顺序:核心模块——>第三方模块——>用户定义模块
模块的分类:
- 核心模块,在安装完Node环境后,Node环境自带的模块,可直接导入使用
- 第三方模块,使用
npm命令从外网下载并安装的模块 - 用户定义模块,开发者通过模块定义语法自定义的模块