有没有办法通过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')));
,但我不希望用户访问公共文件夹中的某些文件。
答案 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中而可以访问的每个文件。这就是网络的运作方式,而且无法绕过它。