2017-06-01 61 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。在有人注意到这个错误之前,可能很长时间(以商业术语)。

相关问题