快速父文件夹访问

时间:2016-01-16 16:27:49

标签: javascript node.js express

大家好,我正在研究这个明确的应用。在我的快递文件的顶部,我写了这一行,因为我的所有静态文件都位于我的工作目录中:

app.use(express.static(__dirname)); 

现在我想发送一个存在于当前文件夹的父文件夹中的文件:

app.get('/test', function(req, res) {
res.sendFile("../../test.html");
});

它对我不起作用,通常因为所有静态文件必须存在于上面的defirect目录中,我可以设置异常并使我的代码工作吗?

1 个答案:

答案 0 :(得分:4)

express.staticres.sendFile对彼此一无所知。他们happen to share a lot of the same internals但并不真正相关。

您可以将test.html放在任何位置,然后使用Node的内置path模块引用它。例如,如果您的文件结构如下所示:

test.html
real-app/
├── app.js
├── node_modules/
└── package.json

然后你可以像这样发送test.html

var path = require('path');

// ...

app.get('/test', function(req, res) {
  var testHtmlPath = path.resolve(__dirname, '..', '..', 'test.html');
  res.sendFile(testHtmlPath);
});

PS:我不推荐您发送静态文件的方式。提供与您的应用代码相同的目录中的文件(这是__dirname的含义)会导致code disclosure,黑客可以使用这些文件来利用代码中的问题。例如,如果黑客访问了此网址:

  

http://yourapp.com/app.js

他们可以看到app.js,其中包含您所有应用程序的代码。你不想向黑客透露这一点!他们还可以导航到/secret-passwords.json或其他类似文件的路线。

通常,静态文件放在一个特殊目录中,通常称为staticpublic。您可以像这样提供此目录中的文件:

var path = require('path');

// ...

var staticFilesPath = path.resolve(__dirname, 'public');
app.use(express.static(staticFilesPath));

一般情况下,您应该非常小心地发送位于应用代码之外的文件。

希望这有帮助!