赞
踩
官方概念:Node.js 是一个基于 Chrome V8 引擎 的 JavaScript 运行时
chrome V8引擎: chrome浏览器用来解析和执行js代码的工具
运行时:理解为一个容器,用来运行代码的环境
Node.js更通俗的解释是:一个用chrome浏览器V8引擎来跑JS代码的环境
● 浏览器是javascript的前端运行环境
● Node.js是javascript的后端运行环境
● Node全名是Node.js(也叫Node, nodejs, node.js),但它不是一个js文件,而是一个软件
● Node.js是一个基于Chrome V8引擎的javascript的运行环境,在这个环境中可以执行js代码
● Node.js提供了大量的内置模块及丰富的第三方模块,能够让我们完成文件读写、Web服务器、操作数据库等功能
##安装
点击左侧的按钮(有LTS标识的那个),会立即下载。
● LTS: 长期稳定版(Long Term Support))。 项目开发建议使用长期稳定版
● Current: 最新版。最新版包含了一些新功能,如果想学习最新的功能,则可以使用该版本。最新版可能会有一些未知的bug。
● 建议安装目录所使用英文路径 (不要安装在类似于 d:/软件/node)
● 安装完成之后, 它不会在桌面出现快捷图标,没法双击打开
打开任意一个小黑窗,输入node -v能够看到Nodejs版本号即为安装成功。
在资源管理器中按下shift,同时点击鼠标右键,可以选择在此处打开powershell/命令行窗口。
node 空格 某个js文件 # 调用 node 程序,运行某个js文件 clear 或者 cls # 清空界面 ls/dir # 查看列表(list) cd 目录名 # 进入到目录中去 cd .. # 返回上一级目录 cd \ # 直接回到根目录 Ctrl+C # 停止 Node 程序 输入部分文件名后按下 Tab 键 // 补全文件名 或 目录名, 多次tab会进行切换 ↑ ↓ 上下箭头 # 切换历史输入
在小黑窗中复制内容:选中内容,再点鼠标右键
把粘贴板中的内容复制到小黑窗: 点鼠标右键
js由三部分组成:ECMAScript + BOM + DOM
es6 就是ECMAScript 6.0的简写,也泛指其之后的所有版本
ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商协会,European Computer Manufacturers Association)通过ECMA-262标准化的脚本程序设计语言。是javascript语言的一个标准。它约定了:如何定义变量,函数,运算,数组,内置对象等等。
有ECMAScript + 内置模块(fs, http, path,…)。在nodejs中是没有BOM、DOM、window,但使用ECMAScript是通用的
NodeJS中没有DOM,也没有BOM,也没有window对象。
每个模块都是一个独立的文件。每个模块都可以完成特定的功能,我们需要时就去引入它们,并调用。
● 核心模块
○ 就是nodejs自带的模块,在安装完nodejs之后,就可以任意使用
○ 相当于学习js时使用的Array对象
○ 源代码 https://github.com/nodejs/node/tree/master/lib
● 自定义模块
○ 程序员自己写的模块
○ 相当于我们在学习js时的自定义函数。
● 第三方模块
○ 其他程序员写好的模块。nodejs生态提供了一个专门的工具npm来管理第三方模块,后面我们会专门讲到。
○ 相当于别人写好的函数或者库。例如我们前面学习的axios, JQuery库,artTemplate等。
fs模块(fs是 FileSystem的简写)是Node.js用来进行文件操作的模块,它属于核心模块。
核心模块的使用步骤:
1.引入模块
// 引入模块
const fs = require('fs');
// 可以使用var、let,但是建议使用const,因为我们不希望它被改变。
// 名字不必大写成FS,一般也就叫fs这个名字。
fs.各种API(实参)
const fs = require("fs")
let rs = fs.readFileSync('文件路径',"utf8")
// rs 就是读出来的内容
console.log(rs)
注意:api的名字结尾有Sync(async是异步的,sync表示同步的)
如果读成功,则会获取读出来的数据,如果失败了,则会中断后续所有的代码执行。
console.log(1)
let res = fs.readFileSync('errorPath.js')
console.log(res)
console.log(2) // 这句代码是不会执行的
解决方案:用try. catch 结构
// try catch
// try {
// 可能会有错误的代码
// } catch(err){
// 如果try内的代码有错误,就会进入catch,并把错误传进来
// }
try {
const fs = require("fs")
let rs = fs.readFileSync('文件路径',"utf8");
console.log(rs)
} catch(err) {
console.log(err)
}
功能:向指定文件中写入字符串, 如果没有该文件则尝试创建该文件。
fs.writeFileSync(pathName, content, option);
// 参数1: 要写入的文件路径 --- 相对路径和绝对路径均可,推荐使用绝对路径
// 参数2: 要写入文件的内容
// 参数3: 配置项,设置写入的字符集,默认utf-8
注意:它是覆盖写入,会把文件中的内容全部删除,再填入新的内容。
const fs = require('fs')
fs.writeFileSync('./a.txt', 'hello world! \n 换一行')
const fs = require('fs')
const data = [{name: '小王', age: 20}]
fs.writeFileSync('./a.txt', data)
上面的写法会出错: data不是一个字符串或者是Buffer
解决方式: 调用JSON.stringify先对内容做处理,转成字符串,再保存
const fs = require('fs')
const data = [{name: '小王', age: 20}]
fs.writeFileSync('./a.txt', JSON.stringify(data))
假设有如下两个文件,它们所处的目录及文件名如下所示:
pageA
└── code
├── readFile.js # 用来读txt
└── rs.txt # 文本文件,具体的内容没有影响
readFile.js用来读出rs.txt中的内容,并显示。它的代码是这样的:
// code/readFile.js
const fs = require('fs');
fs.readfilesync("./rs.txt",'utf8');
//注意这里对fs.txt的访问使用的是相对"readFile.js" 本身的路径
由于readFiles.js和要读取的目标rs.txt是在同级目录下,所以可以写相对路径。
想要运行readFile.js这个文件有多种方式,根据当前处在的位置不同:
● A方案:如果终端中的路径定位在pageA/code目录下,则通过node readFile.js就可以运行
● B方案:如果终端中的路径定位在pageA目录下,通过:node code/readFile.js 能成功执行.js文件,但是却找不到.txt文件的路径了。
我们在fs中读取文件时,由于使用的是相对路径,所以在读这个文件的时,nodejs会去:
运行命令的小黑窗的路径 + 代码中的相对路径
找它。
所以上述代码中:
● A方案在运行时,找到的文件是pageA/code/rs.txt,它可以找到文件
● B方案在运行时,找到的文件是pageA/rs.txt,它就找到不文件了
__dirname __filename 获取绝对路径
nodejs中提供了两个全局变量来获取获取绝对路径:
● __filename:获取当前被执行的文件的绝对路径
● __dirname:获取当前被执行的文件的文件夹所处的绝对路径
只需要在读入文件时,在文件名的前面拼接上路径:
const fs = require('fs')
const filePath = __dirname + '\rs.txt'
const rs = fs.readFileSync(filePath)
作用 : 是用来处理路径问题:拼接,分析,取后缀名等等。
● path.basename() :此方法返回 path 的最后一部分。一般可用来获取路径中的文件名。
● path.join() :路径拼接。
● path.parse(pathurl) :把一个路径转成一个对象
path.basename('/foo/bar/baz/asdf/quux.html');// 返回: 'quux.html'
path.basename('/foo/bar/baz/asdf/quux.html', '.html');// 返回: 'quux'
path.dirname('/foo/bar/baz/asdf/quux');// 返回: '/foo/bar/baz/asdf'
path.extname('index.html');// 返回: '.html'
注意:path模块并不考虑其中地址是否真的存在,只是单纯调用方法,获取结果。
const fs = require('fs')
const path = require('path')
const filePath = path.join(__dirname, 'html5.jpg')
console.log(filePath)
方法 | 作用 |
---|---|
path.basename(path[, ext]) | 获取返回 path 的最后一部分(文件名) |
path.dirname(path) | 返回目录名 |
path.extname(path) | 返回路径中文件的扩展名(包含.) |
path.format(pathObject) | 将一个对象格式化为一个路径字符串 |
path.join([…paths]) | 拼接路径 |
path.parse(path) | 把路径字符串解析成对象的格式 |
path.resolve([…paths]) | 基于当前工作目录拼接路径 |
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) | 监视文件 |
fs.existsSync(absolutePath) | 判断路径是否存在 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。