use*_*821 2 javascript node.js express
大家好,我正在研究这个快速应用程序。在我的 express 文件的顶部,我写了这一行,因为我所有的静态文件都位于我的工作目录中:
app.use(express.static(__dirname));
Run Code Online (Sandbox Code Playgroud)
现在我想发送一个存在于当前文件夹的父文件夹中的文件:
app.get('/test', function(req, res) {
res.sendFile("../../test.html");
});
Run Code Online (Sandbox Code Playgroud)
它对我不起作用,通常是因为所有静态文件都必须存在于上面的目录 defind 中,我可以例外并让我的代码工作吗?
express.static并且res.sendFile对彼此一无所知。它们碰巧共享许多相同的内部结构,但实际上并不相关。
你可以把test.html它放在任何你想要的地方,然后使用 Node 的内置path模块引用它。例如,如果您的文件结构如下所示:
test.html
real-app/
??? app.js
??? node_modules/
??? package.json
Run Code Online (Sandbox Code Playgroud)
然后你可以test.html像这样发送:
var path = require('path');
// ...
app.get('/test', function(req, res) {
var testHtmlPath = path.resolve(__dirname, '..', '..', 'test.html');
res.sendFile(testHtmlPath);
});
Run Code Online (Sandbox Code Playgroud)
PS:我不推荐您发送静态文件的方式。从与您的应用程序代码相同的目录中提供文件(这就是什么__dirname意思)可能会导致代码泄露,黑客可以利用它来利用您代码中的问题。例如,如果黑客访问了此 URL:
他们将能够看到app.js,其中包含您应用程序的所有代码。您不想将其透露给黑客!他们还可以导航到路由之类的/secret-passwords.json文件或其他类似文件。
通常,静态文件放置在一个特殊目录中,通常称为static或public。您可以从该目录提供文件,如下所示:
var path = require('path');
// ...
var staticFilesPath = path.resolve(__dirname, 'public');
app.use(express.static(staticFilesPath));
Run Code Online (Sandbox Code Playgroud)
通常,您应该非常小心地发送位于应用程序代码之外的文件。
希望这可以帮助!