我试图将静态HTML发送给客户端。
我正在使用此方法成功完成此操作
app.get('/forgot', function (req, res) {
console.log("Forgot password");
res.sendFile("Forgot.html", {
root: "public/statichtml/"
});
});
但是,如果我使用类似下面的路由,那么客户端将被提供给html文件,但是html引用的任何JS文件都会在' reset'中查找。文件夹 - 例如复位/ 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()
}
});
}
});
});
有人可以解释为什么会发生这种情况吗?
答案 0 :(得分:0)
您的网页中的<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
。< / p>