node.js - sendfile 有问题

标签 node.js express

我正在尝试向客户端发送静态 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/

相关文章:

linux - 使用 "node server &"运行 Node 服务器

javascript - Passport - 动态覆盖策略

node.js - MEAN 在源文件更改时自动编译

javascript - 我正在尝试在 ejs 文件中加载 bundle.js 脚本?

javascript - 有没有办法在每次 AngularJS 中进行 ajax 调用时触发一个事件?

node.js - JavaScript,如何知道url是否是静态文件

node.js - express.js 不提供我的图像

node.js - Node.js 中的计时问题

node.js - 使用 websockets 读取 CSV 文件并定期发送数据(Node、Socket.io)

node.js - 处理ExpressJS中混合的同步和异步错误的最佳方法