Node.js 对sendfile有问题

Node.js 对sendfile有问题,node.js,express,Node.js,Express,我正在尝试向客户端发送静态html 我用这种方法成功地做到了这一点 app.get('/forgot', function (req, res) { console.log("Forgot password"); res.sendFile("Forgot.html", { root: "public/statichtml/" }); }); 但是,如果我使用下面的路由,则会向客户端提供html文件,但是html引

我正在尝试向客户端发送静态html

我用这种方法成功地做到了这一点

app.get('/forgot', function (req, res) {
        console.log("Forgot password");

        res.sendFile("Forgot.html", {
            root: "public/statichtml/"
        });
    });
但是,如果我使用下面的路由,则会向客户端提供html文件,但是html引用的任何JS文件都会在“reset”文件夹中查找,例如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()
                    }
                });
            }


        });
    });

有人能解释一下为什么会发生这种情况吗?

您的网页中的
标记似乎存在相对路径问题。下面是发生的情况

如果您有一个
/index.html
网页和一个
标签,如下所示:

<script src="reset/configuration.js"></script>

由于此脚本标记src以
/
开头,因此根本不会使用该页面的路径,浏览器将始终请求
/reset/configuration.js
,无论该页面的路径是什么。

您的网页中的
标记存在相对路径问题。下面是发生的情况

如果您有一个
/index.html
网页和一个
标签,如下所示:

<script src="reset/configuration.js"></script>

由于此脚本标记src以一个
/
开头,因此根本不会使用该页面的路径,并且无论该页面的路径是什么,浏览器都会一致地请求
/reset/configuration.js

您是否意识到所有js文件也需要路由?默认情况下,node.js不提供任何服务。也许您应该将所有静态资源(如脚本文件)放在一个子目录中,并使用
express.static()
为它们提供服务。如果您的HTML文件是静态的(不是呈现的模板),那么您也可以将它们放在子目录中,并对它们使用
express.static()
。此外,如果您在HTML文件中使用没有脚本文件名路径的普通文件名,那么浏览器会在请求它们时将当前网页的路径添加到这些文件中。通常,您不希望在
标记上使用没有路径的普通文件名,除非您的所有网页也没有路径。因此,在脚本标记文件名上加一个前导的
/
。因此,位于URL为
/reset/index.html的网页中的
将导致浏览器请求
/reset/foo.js
。更改为类似于
的内容以进行修复。我应该添加我正在使用此代码设置根:app.use(express.static(path.join(u dirname,'public/statichtml'));脚本标记上的路径是什么?它们所在页面的URL是什么?请重新阅读我的所有评论,说明当您使用相对脚本路径并且在URL上有网页的路径时会发生什么。我已经解释过多次了——一个页面URL有路径,另一个没有。没有页面的可以工作,有路径的不能工作
/reset/xxx
有一个路径
/reset
,该路径与页面中的相对URL组合。如果你不明白我写的东西,请问一个更具体的问题,因为我觉得我已经解释了两次不同之处。你意识到你也需要所有JS文件的路由吗?默认情况下,node.js不提供任何服务。也许您应该将所有静态资源(如脚本文件)放在一个子目录中,并使用
express.static()
为它们提供服务。如果您的HTML文件是静态的(不是呈现的模板),那么您也可以将它们放在子目录中,并对它们使用
express.static()
。此外,如果您在HTML文件中使用没有脚本文件名路径的普通文件名,那么浏览器会在请求它们时将当前网页的路径添加到这些文件中。通常,您不希望在
标记上使用没有路径的普通文件名,除非您的所有网页也没有路径。因此,在脚本标记文件名上加一个前导的
/
。因此,位于URL为
/reset/index.html的网页中的
将导致浏览器请求
/reset/foo.js
。更改为类似于
的内容以进行修复。我应该添加我正在使用此代码设置根:app.use(express.static(path.join(u dirname,'public/statichtml'));脚本标记上的路径是什么?它们所在页面的URL是什么?请重新阅读我的所有评论,说明当您使用相对脚本路径并且在URL上有网页的路径时会发生什么。我已经解释过多次了——一个页面URL有路径,另一个没有。没有页面的可以工作,有路径的不能工作
/reset/xxx
有一个路径
/reset
,该路径与页面中的相对URL组合。如果你不明白我写的东西,请问一个更具体的问题,因为我觉得我已经解释了两次不同之处。谢谢你花时间。我会尝试这个并汇报。谢谢你花时间。我会尝试这个并汇报