我正在尝试向客户端发送静态 html。
我使用这种方法成功地做到了这一点
app.get('/forgot', function (req, res) {
console.log("Forgot password");
res.sendFile("Forgot.html", {
root: "public/statichtml/"
});
});
但是,如果我使用如下所示的路由,则会向客户端提供 html 文件,但会在“重置”文件夹中查找 html 引用的任何 JS 文件 - 例如重置/config.js:
app.get('/reset/:token', function (req, res) {
User.findOne({
'local.resetPasswordToken': req.params.token,
'local.resetPasswordExpires': {
$gt: Date.now()
}
}, function (err, user) {
if (!user) {
return res.redirect('/forgot');
}
if (user) {
res.sendFile("Reset.html", {
root: "public/statichtml/"
}, function (err) {
if (err) {
//res.status(err.staus).end()
}
});
}
});
});
有人可以解释一下为什么会发生这种情况吗?
最佳答案
您似乎遇到 <script>
的相对路径问题网页中的标签。这就是发生的事情。
如果您有一个网页 /index.html
和一个 <script>
像这样的标签:
<script src="reset/configuration.js"></script>
然后,浏览器将看到包含 HTML 页面的路径是 /
所以它会将其与您的脚本文件名结合起来,并请求 /reset/configuration.js
。在您的情况下,看起来效果很好。
现在,如果您有一个网页 /reset/1234
和该页面中相同的脚本标记,浏览器将看到该页面的路径为 /reset
它将与您的脚本文件名结合起来,浏览器将请求 /reset/reset/configuration.js
。这对你不起作用。
解决此问题的方法是不要对脚本标记使用相对路径。相反,添加根级别路径指定,如下所示:
<script src="/reset/configuration.js"></script>
由于此脚本标记 src 以 /
开头,页面中的路径根本不会被使用,浏览器将始终请求 /reset/configuration.js
无论页面的路径是什么。
关于node.js - sendfile 有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36050175/