了解一下网络地址URL,文件FS,路径Path

37 阅读4分钟

⽹络地址URL

作⽤:URL处理
步骤:

  1. 引⼊url模块 const url = require("url");
  2. 调⽤url相关API对URL地址进⾏处理

示例:原本的parse⽅法,现在换成了URL

const url = require('url');
const myURL = 'https://example.com:8080/path?query=string';
const urlAnalyze = new url.URL(myURL);
console.log(urlAnalyze);
// 打印结果
URL {
href: 'https://example.com:8080/path?query=string',
origin: 'https://example.com:8080',
protocol: 'https:',
username: '',
password: '',
host: 'example.com:8080',
hostname: 'example.com',
port: '8080',
pathname: '/path',
search: '?query=string',
searchParams: URLSearchParams { 'query' => 'string' },
hash: ''
}

示例: url.format(URL[, options])

const url = require('url');
const urlObject = {
protocol: 'https:',
hostname: 'example.com',
port: 8080,
pathname: '/path',
query: { query: 'string' },
};
const formattedUrl = url.format(urlObject);
console.log(formattedUrl);

示例: url.resolve(from,to) url.resolve()⽅法主要⽤来插⼊或替换URL内容
from 源地址
to 需要添加或替换的标签

const url = require("url");
console.log(url.resolve("/one/two/three","four"));
console.log(url.resolve("/one/two/","four"));
console.log(url.resolve("http://www.baidu.com","/topic"));
console.log(url.resolve("http://www.baidu.com/one","topic"));
// 结果:
/one/two/four
/one/two/four
http://www.baidu.com/topic
http://www.baidu.com/topic
const resolvedUrl = url.resolve('https://example.com/path/', '../file.htm
l');
console.log(resolvedUrl);

⽂件FS

fs系统⽂件模块,对⽂件进⾏操作。Node.js⽂件系统(fs模块)模块中的⽅法均有异步和同步的 版本,例如读取⽂件内容的函数有异步的fs.readFile()和同步的fs.readFileSync()。

FS模块引⼊⽅法:const fs = require("fs"

⽂件夹相关操作

示例:创建⽂件夹 fs.mkdir(path, mode, callback)

// fs.mkdir(path, mode, callback)
//path:此参数保存必须创建⽬录的路径。
//mode:此参数保存递归布尔值。 mode选项⽤于设置⽬录权限,默认情况下为0777。mode还可以
设置recursive,设置成true后可以解决层级创建问题
//callback:此参数保存包含错误的回调函数。如果将递归选项设置为true,则如果要创建的⽬录
已经存在,则不会给出错误消息。
// 创建⽂件夹
fs.mkdir("./b",err => {
if (err) {
throw err;
}
console.log("创建⽂件夹成功");
})
注意:
1、⼀次只能创建⼀个,每次创建的都是路径最后的⼀个⽂件,如果⼀次创建多个会报错
2、如果⽂件夹已经存在则会报错
解决不能层级创建和已存在⽂件夹报错:
fs.mkdir("./a/b",{ recursive:true },err => {
if (err) {
throw err;
}
console.log("创建⽂件夹成功");
})

示例:修改⽂件夹: fs.rename(oldPath, newPath, callback)

fs.rename('./dir','./newDir',err => {
if (err) {
throw err;
}
console.log("修改⽂件夹成功");
}

示例:删除⽂件夹: fs.rmdir(path[, options], callback)

fs.rmdir('./a', err => {
if (err) {
throw err;
}
console.log("删除⽂件夹成功");
})
如果所删除⽂件夹下还有东⻄,会删除失败,只能删除空的⽂件夹
如果希望递归删除:
fs.rmdir('./a', {recursive: true}, err => {
if (err) {
throw err;
}
console.log("删除⽂件夹成功");
})

示例:读取⽂件夹: fs.readdir(path[, options], callback)

fs.readdir('./a',(err,files) => {
if (err) {
throw err;
}
console.log("读取⽂件夹成功",files);
})
读取⽬录的内容。 回调有两个参数 (err, files),其中 files 是⽬录中,⽂件名的数组,不包
括 '.''..'

⽂件相关操作

示例:创建⽂件: fs.writeFile(file, data[, options], callback)

fs.writeFile('./test.txt', "Hi\nNode.js", err => {
if (err) {
throw err;
}
console.log("写⼊⽂件成功");
})
1.如果当前没有test.txt,会创建⼀个test.txt2.writeFile会覆盖原来的⽂件内容

示例:追加⽂件: fs.appendFile(path, data[, options], callback)

fs.appendFile('./test.txt', "\n我是追加内容", (err) => {
if (err) throw err;
console.log("追加成功");
})
如果当前没有test.txt,会创建⼀个test.txt

示例:删除⽂件: fs.unlink(path, callback)

fs.unlink('./test.txt', err => {
if (err) {
throw err;
}
console.log("删除⽂件成功");
})
fs.unlink() 不适⽤于⽬录,⽆论是空⽬录还是其他⽬录。 要删除⽬录,请使⽤ fs.rmdir()

路径Path

作⽤:path 模块是 Node.js 官⽅提供的、⽤来处理路径的模块。它提供了⼀系列的⽅法和属性,⽤来满 ⾜⽤户对路径的处理需求。

步骤:

  1. 引⼊path模块 const path = require('path');
  2. 调⽤path相关API对⽂件夹或者⽂件进⾏操作

示例: path.basename(path[, ext])

path.basename('/foo/bar/baz/asdf/quux.html');
// 返回: 'quux.html'
path.basename('/foo/bar/baz/asdf/quux.html', '.html');
// 返回: 'quux'

注意:路径后缀区分⼤⼩写,如果ext写的是.HTML⽽⽂件后缀是.html,则不会匹配成功

示例: path.join([...paths])

path.join('/foo', 'bar', 'baz/asdf', 'quux', '..');
// 返回: '/foo/bar/baz/asdf'
path.join('a','b','/c/d','','e');
// 返回 a/b/c/d/e
// 零⻓度的 path ⽚段被忽略。 如果连接的路径字符串是零⻓度字符串,则将返回 '.',表示当
前⼯作⽬录

示例:获取路径中的⽂件扩展名 path.extname(path)

path.extname('index.html');
// 返回: '.html'
path.extname('index.coffee.md');
// 返回: '.md'
path.extname('index.');
// 返回: '.'
path.extname('index');
// 返回: ''
path.extname('.index');
// 返回: ''
path.extname('.index.md');
// 返回: '.md'

Tips: path.extname() ⽅法返回 path 的扩展名,即 path 的最后⼀部分中从最后⼀次出现的 .(句点) 字符到字符串的结尾。 如果 path 的最后⼀部分中没有 .,或者除了 path 的基本名称的第⼀个字符之外 没有 . 个字符,则返回空字符串。

示例:path.resolve([...paths])

console.log(path.resolve('./text.txt'));
// 返回 .\code\text.txt
console.log(path.resolve('./d1','index.js'));
// 返回 .\code\d1\index.js
console.log(path.resolve('./d1','/index.js'));
// 返回 f:\index.js

给定的路径序列从右到左处理,每个后续的 path 会被追加到前⾯,直到构建绝对路径为⽌。
例如:给定路径⽚段的序列:/foo、/bar、baz,调⽤ path.resolve('/foo', '/bar', 'baz') 将返回 /bar/baz,因为'baz' 不是绝对路径,⽽ '/bar' + '/' + 'baz' 是。path.resolve('/foo', '/bar','baz') 返回/bar/baz的结果是因为 path.resolve() 会将所有传递给它的路径参数解析为绝对路径,并返回最后⼀个参数的绝对路径。

在这个例⼦中,/foo 和 /bar 都被视为绝对路径,因为它们以斜杠 / 开头,表示根⽬录下的路径。然 后,'baz' 是相对路径,但由于 path.resolve() 的⾏为,它会将最后⼀个参数解释为绝对路径。 所以,path.resolve('/foo', '/bar', 'baz') 返回的结果是 /bar/baz,因为它解析为根⽬录下的/bar/baz路径。 如果没有传⼊ path ⽚段,则 path.resolve() 将返回当前⼯作⽬录的绝对路径。

补充知识:

__dirname:表示当前模块的绝对路径。
__filename:表示当前模块的⽂件名,包括⽂件的绝对路径。