电竞比分网-中国电竞赛事及体育赛事平台

分享

node 學(xué)習(xí)筆記

 tingx 2017-07-26

本文同步自我的個人博客:http://www./2015/12/04/learn-node-path.html

path 模塊是 node 用于整理、轉(zhuǎn)換、合并路徑的神器,只要是路徑問題,都可以交給它處理。
但它僅僅是處理路徑字符串,而不會去堅持或處理文件。

path.normalize 路徑整理

做項目時,往往都是基于相對路徑,于是經(jīng)常會出現(xiàn)類似這樣的路徑 path//upload/../file/./123.jpg。
當然這個是把所有坑都寫到一起了,不過就算這樣的路徑,path.normalize 分分鐘搞定。

var path = require('path');

var str = path.normalize('./path//upload/data/../file/./123.jpg');
console.log(str); // path/upload/file/123.jpg

path.join 拼接路徑

那些奇葩路徑往往都是自己拼接導(dǎo)致的,如果用一些工具幫助我們處理這,就可以直接得到規(guī)范的路徑了,而且不需要擔心跨平臺問題。這里的 path.join 就可以幫助我們生產(chǎn)跨平臺,規(guī)范化的路徑字符串。

var path = require('path');

var str = path.join('./path/./', './upload', '/file', '123.jpg');
console.log(str); // path/upload/file/123.jpg

var str = path.join('path', 'upload', 'file', '123.jpg');
console.log(str); // path/upload/file/123.jpg

var arr = ['path', 'upload', 'file', '123.jpg'];
var str = path.join.apply(null, arr);
console.log(str); // path/upload/file/123.jpg

這個方法雖然方便,但是參數(shù)只能是字符串,否則會拋出錯誤(0.10以上版本)。

path.resolve 絕對路徑

這個絕對路徑操作,跟上面的不太一樣,如果你懂命令行 cd 命令,那就秒懂了,否則需要花點時間多跑幾個例子才能理解。這次直接上官方例子。

path.resolve('foo/bar', '/tmp/file/', '..', 'a/../subfile');
// 返回 /tmp/subfile

相當于命令行下的

cd foo/bar
cd /tmp/file/
cd ..
cd a/../subfile
pwd

他的解析不是在是簡單的拼接關(guān)系,而是類似 cd 命令的解析了。

path.relative 相對路徑

有絕對就有相對,有時我們有兩個絕對路徑, 我們需要從中找出相對目錄的起源目錄。

path.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb')
// 返回 ../../impl/bbb

path.dirname 文件路徑

根據(jù)一個文件或目錄得到它所在的目錄路徑,這個很常用。

var path = require('path');

var str = path.dirname('path/upload/file/123.jpg');
console.log(str); // path/upload/file

var str = path.dirname(__filename); // 等價于 __dirname
console.log(str, __dirname); // 當前文件所在目錄

path.basename 獲取路徑中的文件名

確切的說是返回最后一個路徑分割后面的文件名,不論是文件還是目錄,第二個參數(shù)可以忽略文件后綴。

var path = require('path');

var str = path.basename('path/upload/file/123.txt.jpg');
console.log(str); // 123.txt.jpg

var str = path.basename('path/upload/file/123.txt.jpg', '.jpg');
console.log(str); // 123.txt

var str = path.basename('path/upload/file/123.txt.jpg', '.txt.jpg');
console.log(str); // 123

var str = path.basename('path/upload/file/');
console.log(str); // file

代碼都是簡單易懂的。

path.extname 文件后綴

確切說,就是返回最后一個 . 之后的字符串,沒有則返回空。

var path = require('path');

var str = path.extname('path/upload/file/123.txt.jpg');
console.log(str); // '.jpg'

var str = path.extname('path/upload/file/123.txt');
console.log(str); // '.txt'

var str = path.extname('path/upload/file/');
console.log(str); // ''

path.parse 解析路徑

把一個路徑解析為一個 {root:'', dir:'', base:'', ext:'', name:''} 這樣的對象。
有時候要獲取文件名,文件后綴,文件目錄,這樣到省事了,直接搞定。上官方例子。

path.parse('/home/user/dir/file.txt')
// returns
{
    root : "/",
    dir : "/home/user/dir",
    base : "file.txt",
    ext : ".txt",
    name : "file"
}

// windows
path.parse('C:\\path\\dir\\index.html')
// returns
{
    root : "C:\\",
    dir : "C:\\path\\dir",
    base : "index.html",
    ext : ".html",
    name : "index"
}

path.format 生成路徑

正好跟 path.parse 相反,這個則是根據(jù) {root:'', dir:'', base:'', ext:'', name:''} 這樣的對象來生成字符串。上官方例子。

path.format({
    root : "/",
    dir : "/home/user/dir",
    base : "file.txt",
    ext : ".txt",
    name : "file"
})
// returns
'/home/user/dir/file.txt'

其他屬性

還有一些屬性,如 path.sep 不同平臺下的文件路徑分隔符,win 是 \\,*nix 則是 /。
path.delimiter 字面解釋,這才是分隔符,但這個往往是環(huán)境變量中出現(xiàn)的,win 是 ;,*nix 則是 :,你們懂的。

還有兩個奇葩屬性,path.posixpath.win32 他們都包含上面這些方法屬性,前者跨平臺,后者只是win上。
不知道為什么要單獨搞兩個這樣的屬性。

好了,爭取每天學(xué)習(xí)一點基礎(chǔ),只有把這些基礎(chǔ)知識梳理一遍,才能更好的掌握 node。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多