遇到sendfile问题

时间:2016-03-17 01:38:36

标签: node.js express

我试图将静态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()
                    }
                });
            }


        });
    });

有人可以解释为什么会发生这种情况吗?

1 个答案:

答案 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>