【发布时间】:2020-09-10 18:05:07
【问题描述】:
我有这样的目录结构
root
private
js
css
index.html
app.js
privateRouter.js
...
在我的 index.html 中,我使用这样的相对路径引用 js 和 css 文件:
<link rel="stylesheet" href="css/index.css"/>
<script src="js/index.js"></script>
在服务器端,我有一个私有路由器在提供这些文件之前检查身份验证:
在 app.js 中:
app.use("/private", privateRouter);
在 privateRouter.js 中:
router.use((req, res, next) => {
isAuthenticated(req) ? next() : res.redirect("/");
});
router.get('/', function(req, res, next) {
res.sendFile(require('path').join(__dirname + "/private/index.html"));
});
所以现在如果我访问http://mywebsite.com/private,我会得到index.html,但是来自浏览器的js/css文件请求以http://mywebsite.com/js而不是http://mywebsite.com/private/js返回服务器,因此返回文件不是找到了。
或者,如果我静态地提供文件,浏览器知道从/private/js 请求:
app.use("/private", express.static(path.join(__dirname, 'private')));
但我不能静态服务器,因为我需要对特定文件进行身份验证,而不是公开提供所有文件。而且我不想在客户端的所有文件引用之前附加private/。我不明白为什么在静态服务时服务器知道使用/private 作为root,但在使用路由器时它使用/ 作为root。
如何将 url 保留为 http://mywebsite.com/private 而不必在客户端的所有文件引用中附加 private/?
我是 express.js 的新手,我也很难提出这个问题。我认为我从根本上误解了 express.js 的工作原理。感谢您的帮助!
【问题讨论】: