最近在做一些文件的处理,发现得好好的了解一些node.js中一些常见得路径.
1.绝对路径和相对路径的定义
绝对路径:
绝对路径是指目录下的绝对位置,直接到达目标位置,通常是从盘符开始的路径。相对路径:
相对路径就是指由这个文件所在的路径引起的跟其它文件(或文件夹)的路径关系。 使用相对路径可以为我们带来非常多的便利。
2. node.js中的全局对象
在NodeJS里,是不可能在最外层定义一个变量,因为所有的用户代码都是当前模块的,只在当前模块里可用,但可以通过exports对象的使用将其传递给模块外部.所以,在NodeJS中,用var声明的变量并不属于全局的变量,只在当前模块生效像上述的global全局对象则在全局作用域中,任何全局变量、函数、对象都是该对象的一个属性值.
node.js中的全局对象分为真正的全局对象
以及模块级别的全局对象
真正的全局对象有
: Class:Buffer, process, console, clearInterval, setInterval, clearTimeout, setTimeout, global
process
process 对象是一个全局变量,提供了有关当前 Node.js
进程的信息并对其进行控制,作为一个全局变量,例如我输入: node pathTest/index cute
console.log(process.argv)
[
'C:\\Program Files\\nodejs\\node.exe',
'C:\\Users\\Administrator\\Desktop\\file\\pathTest\\index',
'cute'
]
在终端通过 Node 执行命令的时候,通过 process.argv
可以获取传入的命令行参数,返回值是一个数组:
- 0: Node 路径(一般用不到,直接忽略)
- 1: 被执行的 JS 文件路径(一般用不到,直接忽略)
- 2~n: 真实传入命令的参数
process.exit()
可以结束进程
global
global为全局命名空间对象,process
、console
、setTimeout
等都有放到global
中
console.log(global.process === process) // true
模块级别的全局对象
:__dirname, __filename, exports, module, require
3.__dirname
string当前模块的文件夹名称
index.js
console.log(__dirname); // C:\Users\Administrator\Desktop\file\pathTest
拿到了index.js所在的文件夹名称
因为 file directory 表示的是文件目录,所以__dirname表示的就是 directory name => 文件目录名
4.__filename
当前模块的文件名称---解析后的绝对路径。
// 当前模块的文件夹
console.log(__dirname); // C:\Users\Administrator\Desktop\file\pathTest
// 当前模块文件
console.log(__filename) // C:\Users\Administrator\Desktop\file\pathTest\index.js
5.path
path
模块提供了一些工具函数,用于处理文件与目录的路径。可以通过以下方式使用:
const path = require('path');
5.1 path.dirname()
path.dirname()
方法返回一个 path
的目录名
// 当前模块的文件夹
console.log(__dirname); // C:\Users\Administrator\Desktop\file\pathTest
// 当前模块文件
console.log(__filename) // C:\Users\Administrator\Desktop\file\pathTest\index.js
const path = require('path');
// 得到所传入的模块的文件夹路径
console.log(path.dirname(__filename)) // C:\Users\Administrator\Desktop\file\pathTest
不难发现,console.log(__dirname)与path.dirname(__filename)结果好像相等
console.log(__dirname === path.dirname(__filename)) // true
__dirname等同于 __filename 的 path.dirname() 的值
5.2 path.resolve()
path.resolve()
方法会把一个路径或路径片段的序列解析为一个绝对路径。
path.resolve()非常重要,平时我们去读某些文件,就需要通过他拿到一些文件得绝对路径
给定的路径的序列是从右往左被处理的,后面每个 path
被依次解析,直到构造完成一个绝对路径。 例如,给定的路径片段的序列为:/foo、/bar、baz,则调用 path.resolve('/foo', '/bar', 'baz') 会返回 /bar/baz
一般我们得场景是,当前模块里面去查找target页面得操作
1.如何拿到a.js
const fs = require('fs')
// 如何拿到a.js
const aPath = path.resolve(__dirname, './a.js')
fs.exists(aPath, (exists) => {
console.log(exists ? 'aPath is there' : 'no passwd!'); // aPath is there
});
const fs = require('fs')
// 如何拿到a.js
const aPath = path.resolve(__dirname, 'a.js')
fs.exists(aPath, (exists) => {
console.log(exists ? 'aPath is there' : 'no passwd!'); // aPath is there
});
以上两种都可以哈,查找a.js resolve()是从右边往左边, 如果遇到得是绝对路径,直接不往左边读了,应该就是左边的路径如何进入到右边target目录的问题
2.如何拿到b.js
const bPath = path.resolve(__dirname, '../b.js')
fs.exists(bPath, (exists) => {
console.log(exists ? 'bPath is there---' : 'no passwd!'); // bPath is there
});
3.如何拿到c.js
const cPath = path.resolve(__dirname, '../brother/c.js')
fs.exists(cPath, (exists) => {
console.log(exists ? 'cPath is there---' : 'no passwd!'); // cPath is there---
});
6.文件增删查
写入:
fs.writeFileSync(path, data, { 'flag': 'a' }, function(err) {
if (err) {
throw err;
}
});
// data为插入的数据
删除:
fs.unlink(path, (err) => {
if (err) throw err;
console.log('成功删除 XXXXX');
});
查询:
fs.exists(path, (exists) => {
console.log(exists ? 'path is there' : 'no passwd!'); // bPath is there
});
获取文件:
fs.readFileSync(path[, options])
const res = fs.readFileSync(aPath); // buffer
有一点要注意,你会发现很多方法有Sync 有的没有,有Sync表示的就是同步,意思就是代码顺序执行
举个例子:
如果我一键生成一个excel文件,接下来要获取excel上的title,那么表示我一定是要等excel生成完,我才去获取title,如果我用的异步,可能excel刚生成一个空白文档,我就去获取,能获取到吗?这肯定是不对的,所以这时候我们保存文件要用writeFileSync,如果我做的事不依赖上一个,可以采用异步,这样不会阻拦我现在要做的事,时间上体验更好
参考:node.js中文文档