仅从index.html请求的Express文件服务

时间:2017-03-28 17:08:42

标签: javascript jquery html node.js express

有没有办法通过get请求在Express中为index.html提供服务并发送index.html请求的所有外部文件?

例如,这是一个非常简单的index.html页面

<!DOCTYPE html>
<html>
    <head>
        <script src="jquery.js"></script>
    </head>
</html>

现在,app.get('/', function (req, res) {res.sendFile('index.html')}将发送index.html,但不会发送jquery.js。无论如何,我可以解决这个问题,并允许所有外部文件index.html也被发送?我知道我可以使用app.use(express.static(path.join(__dirname, 'public')));,但我不希望用户访问公共文件夹中的某些文件。

2 个答案:

答案 0 :(得分:0)

将库文件放在您通过静态文件中间件公开的同一文件夹中。

例如,我的客户端文件包含index.html,名为wwwroot。在文件夹内部,我有一个文件夹lib,我的所有依赖项都在这里,因此我的index.html将引用lib中的文件,

<!DOCTYPE html>
<html>
    <head>
        <script src="lib/jquery.js"></script>
    </head>
</html>

当然,通过静态文件中间件wwwroot公开app.use(express.static('./wwwroot', options));

如果您不希望公开访问某些文件,请将其删除为该文件夹中提到的rsp或尝试使用选项,

let options = {
    dotfiles: 'ignore',
    etag: false,
    extensions: ['html', 'ts', 'css', 'js']
}

答案 1 :(得分:0)

  

我不希望用户访问公共文件夹中的某些文件。

如果您不希望用户访问公用文件夹中的某些文件,则应从公用文件夹中删除这些文件。

但是如果您从公共文件夹中删除这些文件,那么不要期望它们可以提供给客户端。

您可以检查请求是否是访问index.html的结果,例如检查Referer标头或记住用户在一秒钟之前访问过index.html但是一切都很容易绕过。

用户也可以下载因包含在index.html中而可以访问的每个文件。这就是网络的运作方式,而且无法绕过它。