Node介绍
- Node全名是Node.js,但它不是一个js文件,而是一个软件
- Nodejs是一个基于Chrome V8引擎的ECMAScript的运行环境
- Nodejs可以执行js文件(有了Nodejs之后,js文件就能运行在服务器端了)
- Nodejs提供了大量的工具(API),能够让我们完成文件读写、Web服务器创建等功能
nodejs中的JS和浏览器中的JS的区别
- 安装了浏览器这个软件,它不但可以执行ECMAScript,浏览器这个软件内置了window对象,所以浏览器有处理DOM和BOM的能力。
- 安装了NodeJs这个软件,它不但可以执行ECMAScript,NodeJS这个软件也内置了一些东西,包括全局成员和模块系统。
安装Nodejs
体验nodejs
既然说node安装后,也可以执行JS,那么我们就用node执行一行js代码试试,或者写一个js文件,让node执行以下。
- 执行一行JS代码
- 执行一个JS文件
注意事项:- 输入node回车后,要按两次Ctrl+C,才能回到目录中(Ctrl一直按着不放也可以,松开从新按也可以)
- 执行js文件时,如果当前命令行目录和js文件不在同一个盘符下,要先切换盘符
- 执行js文件时,如果当前命令行目录和js文件在同一个盘符中,则可以使用相对路径找到js文件并执行
- 体会,此时执行的js代码或文件和浏览器没有任何关系,他们是通过node执行的
node不但可以执行我们学习过的ECMAScript,node还自带了很多全局对象和很多模块。
全局变量
- node中有一个全局变量global,是node中最大的一个对象,相当于浏览器中的window对象。
- global中的成员在使用时,可以省略global,这点也类似浏览器中的window
下面介绍几个全局对象global中的成员:
- console,我们在初体验时,使用了console,它可不是浏览器中的console对象,使用的是node中的console
- process,和进程相关的对象
- setInterval,同理,也是node中的,不是浏览器中的
- require(),它是全局对象global中的一个方法,用于在js文件中引入另外的文件
- __dirname,当前执行文件的绝对路径(在js文件中使用)
- __filename,当前执行文件的绝对路径,包含文件名(在js文件中使用)
node核心模块
path模块
处理路径的模块
- 操作文件的时候经常要对文件的路径做处理,或者获取文件的后缀,使用 path 模块。
- path 是 Node 本身提供的 API,专门用来处理路径。
- path 仅仅用来处理路径的字符串,不一定存在对应的物理文件。
- 使用方法
- 加载模块
// 使用核心模块之前,首先加载核心模块
let path = require('path');
// 或者
const path = require('path');
- 调用path模块中的方法,来处理相应的问题,下面列举path模块中的几个方法
方法 | 作用 |
---|---|
path.basename(path[, ext]) | 返回 path 的最后一部分(文件名) |
path.dirname(path) | 返回目录名 |
path.extname(path) | 返回路径中文件的扩展名(包含.) |
path.format(pathObject) | 将一个对象格式化为一个路径字符串 |
path.join([…paths]) | 拼接路径 |
path.parse(path) | 把路径字符串解析成对象的格式 |
path.resolve([…paths]) | 基于当前工作目录拼接路径 |
工作目录:当前运行 Node 程序的目录
const path = require('path');
// extname -- 获取文件后缀
console.log(path.extname('index.html')); // .html
console.log(path.extname('index.coffee.md')); // .md
// join -- 智能拼接路径
console.log(path.join('/a', 'b', 'c')); // \a\b\c
console.log(path.join('a', 'b', 'c')); // a\b\c
console.log(path.join('/a', '/b/../c')); // \a\c
console.log(path.join('/a', 'b', 'index.html')); // \a\b\index.html
console.log(path.join(__dirname, 'a', 'index.html')); // 得到一个绝对路径
fs模块
文件操作模块
文件系统,对文件/文件夹的操作 file system
- 使用方法
- 加载模块
// 引入模块,引入模块的时候,可以使用var、let,但是建议使用const,因为我们不希望它改变
const fs = require('fs');
- 调用fs模块的方法,下面列举fs模块中的常用方法
API | 作用 | 备注 |
---|---|---|
fs.access(path, callback) | 判断路径是否存在 | |
fs.appendFile(file, data, callback) | 向文件中追加内容 | |
fs.copyFile(src, callback) | 复制文件 | |
fs.mkdir(path, callback) | 创建目录 | |
fs.readDir(path, callback) | 读取目录列表 | |
fs.rename(oldPath, newPath, callback) | 重命名文件/目录 | |
fs.rmdir(path, callback) | 删除目录 | 只能删除空目录 |
fs.stat(path, callback) | 获取文件/目录信息 | |
fs.unlink(path, callback) | 删除文件 | |
fs.watch(filename[, options][, listener]) | 监视文件/目录 | |
fs.watchFile(filename[, options], listener) | 监视文件 |
// readFile -- 异步读取文件
fs.readFile('./test.json', (err, data) => {
if (err) {
console.log('读取文件出错');
} else {
console.log(data); // 读取到的二进制数据
}
});
fs.readFile('./test.json', 'utf-8', (err, data) => {
if (err) {
console.log('读取文件出错');
} else {
console.log(data); // 读取到的原始数据
}
});
// writeFile -- 异步写入文件
fs.writeFile('./abc.html', 'hello world', (err) => {
if (err) {
console.log('写入文件失败');
} else {
console.log('文件写入成功');
}
});
querystring模块
查询字符串处理模块
- 处理查询字符串(请求参数)的模块
- 使用方法
- 加载模块
const querystring = require('querystring');
- 调用querystring模块中的方法
// parse -- 将查询字符串解析成JS对象 console.log(querystring.parse('id=1&name=zs&age=20')); // { id: '1', name: 'zs', age: '20' } // stringify -- 将JS对象转成查询字符串 console.log(querystring.stringify({ id: '1', name: 'zs', age: '20' })); // id=1&name=zs&age=20
url模块
- 提供两套处理url的API
- 遗留的API,提供url.parse();方法解析url
- 新的API,通过实例化URL,来解析url
- 使用方法
- 加载模块
const url = require('url');
- 遗留API使用方法
let myURL = url.parse('/test.html?id=11&age=22'); // 返回一个包含url各个部分的对象
- 新的API使用方法,实例化的时候,必须传递一个完整的url
// 直接提供一个完整的url let myURL = new URL('http://www.xxx.com/test.html?id=11&age=22'); // 或 // 提供两个参数,一是文件路径及参数部分,二是域名,总之,二者组合必须是完整的url let myURL = new URL('/test.html?id=11&age=22', 'http://www.xxx.com'); // 得到的myURL是一个对象,包含url中的各个部分 // 如果需要解析参数部分,则使用querystring模块,或使用URL的一个子对象searchParams中的 get方法 let age = myURL.searchParams.get('age'); // 22