node.js的介绍
node.js可以做什么
基于 Express/Koa 框架(http://www.expressjs.com.cn/),可以快速构建 Web 应用
基于 Electron 框架(https://electronjs.org/), 可以构建跨平台的桌面应用,比如 vscode
基于 restify 框架(http://restify.com/),可以快速构建 API 接口项目
读写和操作数据库、创建实用的命令行工具辅助前端开发
Node.js 环境
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
通俗的理解:Node.js 为 JavaScript 代码的正常运行,提供的必要的环境
浏览器 和 Node,都是 JavaScript 的运行环境
具体来说,浏览器是客户端的JS环境;
Node是服务端的JS运行环境 不同环境中,都可以运行 ECMAScript 核心代码
WebAPI是浏览器特有的,只能在浏览器环境下使用;
Node内置API(内置模块)是Node环境特有的,只能在Node环境中使用
Node.js 的安装
点击上方链接进入下载
选择版本
建议下载旧版本的因为旧版本比较稳定
打开下载好的安装包,一直下一步即可安装。
如果不想安装在C盘,则把安装路径中的C修改为D或者E即可。
安装后,打开终端窗口,执行 node -v 命令,如果看到版本号,说明安装成功。
最好安装14.15.1及其以上版本,不要安装低于 12.0.0版 的Node。
win7系统只能安装 12.xx.xx 版本,建议升级到win10系统
Node环境中运行JavaScript
如果有大段的JS代码需要在Node环境中运行 可以把JS代码写到JS文件中 终端中,使用 node xxx.js 命令即可运行文件中的代码 建议文件名用tab键补齐如果补不齐说明代码错误
Node环境中运行JavaScript代码,需要使用终端,没有像浏览器那样的界面。
第一种模式(REPL),只适合执行少量的JS代码,或平时的代码练习用;比较像浏览器环境中的Console面板
第二种模式(执行JS文件),开发中常用。这种模式,要注意路径。
注意、注意、注意,两种模式不能混用。如果你用第一种模式呢,必须先退出,然后才能用第二种模式。
vscode中的终端
无论执行 git 命令,还是 node 命令,都需要使用终端工具 vscode内置了终端工具,我们可以使用它来执行 git 或 node 命令 最佳打开vscode终端的方式 在文件或文件夹上,鼠标右键,在集成终端中打开 这样打开的好处是,终端路径刚好是 当前文件或文件夹的路径
注意点:
不建议打开很多终端,没有特殊情况使用一个最好
注意终端中的路径,是不是代码文件夹或项目文件夹 第一次打开终端,
建议:鼠标在文件上右键,选择“在集成终端中打开”
后续,可以使用快捷键 Ctrl + ~ 切换终端
模块化设计
模块化设计,就是把 整体 拆分成 若干小零件,而且还能把小零件 组装 到一起的设计思想。
模块化的优点: 更利于维护
更好的复用性
Node中的模块化
规定,用户创建的每个JS文件,就是一个小模块,叫做自定义模块
我们可以按照一定的语法将这些小模块组合到一起,形成一个完整的项目
Node中的模块化,通俗的说,就是在JS文件中,能够使用另一个文件中的变量 言外之意,就是把两个毫不相干的JS文件组装到一起
比如有02和03两个文件
03
console.log('我是聪明蛋儿');
let str1 = 'abc'
let str2 = 'xyz'
let fn1 = () => console.log('fn1');
let fn2 = () => console.log('fn2');
// 导出方法1
// module.exports.str1 = str1;
// module.exports.fn1 = fn1;
module.exports = {
str2,
fn2
}
02
let obj = require('./03-b')
console.log(obj);
使用require方法就可以在node输出02可以使用03里的代码了
注意,注意,注意,导入模块时必须带路径,即便两个JS文件在同一个目录,也要加 “./”
Node中的模块分类
自定义模块:用户自己创建的每个JS文件,都是自定义模块
内置模块(核心模块):Node安装后,即可使用的模块,Node环境自带。
第三方模块:其他人或公司、组织开发的模块,发布到 npm 网站,我们需要下载使用的模块
加载模块的语法
加载自定义模块 a 文件:
必须通过 module.exports 共享(导出、暴露)当前模块中的变量
b 文件,需要通过 require() 加载(导入)。(a 文件导出什么,b 文件就得到什么)
加载自定义模块时,必须要带路径 (相对路径、绝对路径都可以;但必须带路径,哪怕是 ./ 也不能省略)
加载自定义模块时,可以省略后缀
加载内置模块;
直接使用 require() 加载即可。
加载模块时,无需带路径,比如 require('fs')
加载内置模块,得到对象类型,对象中内置了很多API方法
加载第三方模块
必须先下载(后续讲解)
了解内置模块
内置模块,顾名思义,即 Node 环境自带的模块;安装完Node即可直接使用
Node内置模块有很多,具体参见 http://nodejs.cn/api/
加载内置模块:let 变量 = require('模块名');
模块和模块之间很好区分,看模块名即可确定他们的作用
内置模块 - fs 模块
fs 模块,f(file)s(system),文件系统;所有关于文件的操作,都可以通过这个模块完成,
fs.readFile() 方法的作用是:读取文件
fs.readFile('文件路径', [utf-8], (err, data) => {
// 读取无错误,err=null; 读取有错误,err=错误对象
// data 表示读取的结果
})
fs.writeFile() 方法的作用是:写入文件
fs.writeFile('文件路径', '写入的内容', err => {
// 写入无错误,err=null; 写入有错误,err=错误对象
})
内置模块 - path 模块
path 模块,path 是路径的意思;所有和路径相关的操作,都可以通过这个模块完成
path.extname() 方法的作用是:获取路径中的后缀
path.extname('文件路径');
path.extname('css/index.css'); // .css
path.extname('E:/a/b/index.html'); // .html
path.extname('assets/js/login.xyz'); // xyz
path.extname('abc/bcd/index'); // null
path.join() 方法的作用是:拼接给出的路径
参数:两个或更多个路径
额外补充:Node中,有一个全局变量 __dirname ,它表示当前 JS 文件所在的绝对路径
console.log(__dirname); // D:/study/100/Node01/code
path.join('路径', '路径', ……);
path.join('css', 'index.css'); // css/index.css
path.join('a', 'b', 'c', 'd.js'); // a/b/c/d.js
path.extname(__dirname, 'js', 'a.js');
// D:/study/100/Node01/code/js/a.js