赞
踩
Node.js是一个能够在服务器端运行JavaScript的开放源代码、跨平台JavaScript运行环境。
Node.js主要用于编写像Web服务器一样的网络应用
官网地址:Node.js
中文官网:Node.js 中文网
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境[在服务器端的运行环境]。
● 学习Node.js是为了解前后端交互流程
● 同时为后面学习前端框架做准备
● 前端有很多业务不能解决,需要使用Node.js处理
Node.js 诞生只有十二年(2009~2021)目前已经相当成熟。相比之下,JavaScript 已存在 24 年,而 Web 则是 31 年。十二年在技术领域并不是很长的时间,但是 Node.js 似乎已存在很久。
进程相当于工厂中的车间,而线程相当于车间中的工人;一个进程可以派生多个线程;
单线程:相当于一家饭店只有一个服务员;
异步、非阻塞I/O(网络I/O、文件I/O):
事件驱动:
JavaScript:ecmascript/BOM/DOM
Node: Ecmascript/Node提供的方法,没有DOM和BOM
善于I/O,不善于计算。因为Node.js最擅长的就是任务调度,如果业务有很多的CPU计算,实际上也相当于这个计算阻塞了这个单线程,就不适合Node.js开发。
当应用程序需要处理大量并发的I/O,而在向客户端发出响应之前,应用程序内部并不需要进行非常复杂的处理的时候,Node.js非常适合。Node.js也非常适合与web socket配合,开发长连接的实时交互应用程序。
下载地址1:Download | Node.js (V14只能是win10及以上。)
下载地址2:Node.js Mirror v12
node-v12.16.0-x64.msi (64位)
node-v12.16.0-x86.msi (32位)
console.log('Hello WEB!');
第一种:通过vscode的code runner插件来运行;
第二种:在dos小窗口使用node.exe或node来运行我们的nodejs程序文件,见下图:
DOS小黑窗:是windows操作系统提供一个字符界面,在这个字符界面中可以通过命令来操作windows操作系统。
第一种:在"运行"框中输入cmd命令;
第二种:在“资源管理器”窗口中的地址栏中输入cmd命令;
第三种:在某个目录或盘符中按住"shift"键再右单击鼠标,然后选择“在此处打开命令窗口”菜单; [win10操作系统可以忽略]
切换盘符: 盘符后面跟冒号
切换目录:cd
查看目录下的信息:dir
. 代表当前目录
.. 代表上一级目录
清屏: cls
tab →←↑↓
windows常用的快捷键:
win+r:打开运行框
win+d:快速回到桌面
win+e:打开资源管理器
win+l:锁屏
就是给操作系统设置指定的参数,设置完这些参数后就可以在当前的操作系统的任意目录执行执行对应的应用程序。
win10:
win7:
二进制、八进制、十进制、十六进制...
在Nodejs中可以通过内置的fs模块来操作系统文件。
文件系统操作都具有同步和异步两种方式。
__dirname:动态获取当前文件所在的目录 【重点】
__filename:动态获取当前文件所在的目录包含当前文件名 【重点】
语法:
fs.openSync(path[, flags])
参数说明:
path:必写参数,是要打开的目标文件名的字符串(可以包含文件所在的具体路径)
flags:可选参数,设置打开文件的模式(访问模式),常用的模式为只读、写入、追加。
打开模式表:
模式 | 说明 |
---|---|
a | 文件用于追加。 如果文件不存在,则创建该文件 |
ax | 类似于a,但如果路径存在,则失败 |
a+ | 打开文件用于读取和追加。 如果文件不存在,则创建该文件 |
ax+ | 类似于 'a+',但如果路径存在,则失败 |
as | 打开文件用于追加(在同步模式中)。 如果文件不存在,则创建该文件 |
as+ | 打开文件用于读取和追加(在同步模式中)。 如果文件不存在,则创建该文件 |
r+ | 打开文件用于读取和写入。 如果文件不存在,则会发生异常 |
rs+ | 打开文件用于读取和写入(在同步模式中)。 指示操作系统绕过本地的文件系统缓存 |
w | 打开文件用于写入。 如果文件不存在则创建文件,如果文件存在则截断文件 |
wx | 类似于 'w',但如果路径存在,则失败 |
语法:
fs.writeSync( fd,内容 )
语法:
fs.closeSync(fd)
代码实例如下:
const fs = require('fs'); //引入fs内置模块 // console.log(fs); // console.log(__dirname, 111); // console.log(__filename, 222); //第一步:打开文件: fs.open() 、fs.openSync() // let fnum = fs.openSync('F:/web_zhengzhou/day04/代码/123.txt', 'a+'); // console.log(fnum); // fs.open('F:/web_zhengzhou/day04/代码/456.txt', 'a+', function(err, fd) { //a+:以追加方式打开文件,可以对文件内容进行读取和追加 // fs.open(`${__dirname}/456.txt`, 'a+', function(err, fd) { //w+:以读取和写入方式打开文件,只能保留最后一次写入的内容,原来内容会被覆盖 fs.open(`${__dirname}/456.txt`, 'w+', function(err, fd) { //第二步:写文件:fs.write()、fs.writeSync() // 读文件:fs.read()、fs.readSync() fs.writeFileSync(fd, '1234'); // fs.write(fd,'Hello...',function(){ // }); //第三步:关闭文件:fs.close()、fs.closeSync() fs.closeSync(fd); });
语法:
fs.writeFileSync( path,data[,options] )
参数说明:
path:必选参数,文件路径
data:文件中写入的数据
options:可选参数,设置以何种方式写入内容,主要有替换和追加 { flag:'a' }a代表追加append,w代表替换,默认为替换
代码示例:
const fs = require('fs'); //写入文件:fs.writeFile()、fs.writeFileSync() //注意:fs.writeFileSync()默认是以"w"方式写入文件内容,也就是覆盖原有文件内容方式写入文件 // fs.writeFileSync(`${__dirname}/456.txt`, 'this is test....'); fs.writeFileSync(`${__dirname}/456.txt`, 'Yes OK!!', { flag: 'a+' });
语法:
fs.readFileSync( path[,options] )
参数说明:
path:必选参数,文件路径
options:可选参数 { encoding:'utf8' } | 'utf8',以utf8编码格式读取内容,中括号代表可选参数
代码示例:
const fs = require('fs'); //读取文件:fs.readFile()、fs.readFileSync() let str = fs.readFileSync(`${__dirname}/456.txt`); console.log(str, str.toString()); // fs.readFile(`${__dirname}/456.txt`, (err, data) => { // console.log(err, data, data.toString()); // });
语法:
fs.renameSync( oldpath,newpath )
参数说明:
oldpath:必选参数,原文件|文件夹路径
newpath:必选参数,新文件|文件夹路径
语法:
fs.unlinkSync( filepath )
参数说明:
filepath:必选参数,要删除的文件路径
语法:
fs.statSync( path )
参数说明:
path:必选参数,文件或文件夹的路径地址
其他:
判断文件:stat.isFile()
判断目录:stat.isDirectory()
语法:
fs.mkdirSync( path[,options] )
参数说明:
path:必选参数,要创建的文件夹完整路径名称
options:可选参数,是否递归创建文件夹,{ recursive:true } true代表递归创建
语法:
fs.readdirSync( path[,options] )
参数说明:
path:必选参数,要删除的文件夹完整路径
options:可选参数,是否递归删除文件夹,{ recursive:true } true代表递归创建,只有V14版本支持
语法:
fs.rmdirSync(path)
参数说明:
path:必选参数,要读取的文件夹的完整路径
如果读取成功返回一个数组。
代码实例如下:
const fs = require('fs'); //判断文件或目录是否存在:fs.exist()、fs.existSync() if (!fs.existsSync(`${__dirname}/mydemo2`)) { //mydemo目录不存在时则创建 //创建目录:fs.mkdir()、fs.mkdirSync() fs.mkdirSync(`${__dirname}/mydemo2`); } //删除目录:fs.rmdir()、fs.rmdirSync() //注意:只能删除空目录 // fs.rmdirSync(`${__dirname}/mydemo`); if (fs.existsSync(`${__dirname}/123.txt`)) { //删除文件:fs.unlink()、fs.unlinkSync() fs.unlinkSync(`${__dirname}/123.txt`); } //对目录或文件重命名:fs.rename()、fs.renameSync() // fs.renameSync(`${__dirname}/456.txt`, `${__dirname}/yesok.txt`); //读取目录:fs.readdir()、fs.readdirSync() let arr = fs.readdirSync(__dirname); // console.log(arr); for (let item of arr) { // console.log(item); //读取文件的状态:fs.stat()、fs.statSync() let stats = fs.statSync(`${__dirname}/${item}`); // console.log(stats); //判断是否为目录:stats.isDirectory() //判断是否为文件:stats.isFile() if (stats.isDirectory()) { //为目录 console.log(`目录:${item}`); } else { //为文件 console.log(`文件:${item}`); } }
fs模块中的每种操作都提供同步与异步两种方式。
在浏览器 JavaScript 中,通常 window是顶层对象,而 Node.js 中的顶层对象是 global
Node平台内置了例如:__filename
和 __dirname
等全局变量 setInterval() setTimeout()等方法
__dirname:动态获取当前文件所在的目录 【重点】
__filename:动态获取当前文件所在的目录包含当前文件名 【重点】
const fs = require('fs'); //读取文件:fs.readFile()、fs.readFileSync() let str = fs.readFileSync(`${__dirname}/456.txt`); console.log(str, str.toString());
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。