2017-06-01 55 views
1

在node.js的,它可以創建使用標準path LIB,例如:是否有任何手動構建URL的風險?

const path = require('path'); 
const myPath = path.join('directory', 'file'); 

是否有建設的路徑改爲手動任何風險的文件的路徑?例如:

const myPath = 'directory/file'; 

我猜應該是很好的,因爲:

  • 沒有什麼特別的約in the docs此。
  • 我從來沒有使用不接受/作爲路徑分隔符的操作系統(即使Windows)。

回答

-1

不以我的觀點來看,我實際上使用這個很多,一旦我是babel的重度用戶使用導入。

0

當您的整個路徑是靜態的時,如您的myPath = 'directory/file'示例中,我沒有明顯的優勢,我知道。

但是,如果您要動態構建路徑,則必須使用path.join等。

一個重要的原因是,與字符串連接不同,path.join等將防止當其中一個參數不是字符串時的意外行爲。

在JavaScript中,與值相關的錯誤是undefined是很常見的錯誤。假設你在你的應用中的一些代碼,登錄後用戶重定向到他們的個人資料:

if (success) { 
    res.redirect(`/users/${params.username}`); 
} 

看起來不錯,對吧?沒那麼快。事實證明,用戶名屬性實際上是params.userName,所以你將每個用戶重定向到/users/undefined。不會拋出錯誤,並且您的單元測試不檢查重定向URL,因此會部署此錯誤。

如果你做了這個:

res.redirect(path.join('/users', params.username)); 

...它會立即拋出ArgumentError錯誤,單元測試會失敗,錯誤就不會被部署。

這是一個天真的例子嗎?是。是否容易檢查undefined?是。但是當你養成使用path.join的習慣時,你不必擔心這一點。你知道,至少你永遠不會意外地在你的路徑中出現undefinednull123

它在服務器端更重要。假設你有一個處理文件上傳的應用程序,並且希望用戶上傳去到一個目錄與他們的用戶名以它的名字:

fs.mkdir(`images/${params.username}`, err => { 
    if (err) { throw new Error('Oops!'); } 
    fs.writeFile(`images/${params.username}/${params.filename}`, params.filedata, /* ... */); 
}); 

現在你擁有的每用戶上傳的內容被寫入images/undefined。在有人注意到這個錯誤之前,可能很長時間(以商業術語)。

相關問題