节点static不能为当前文件夹之上的文件夹提供服务



我不知道这是对node-static的限制,还是我代码中的错误,但我似乎无法让它为当前目录以上或之外的文件提供服务。我目前的目录结构是:

project
    public
        ...public stuff here...
    system
        core
           server.js

server.js位于core目录中,使public的路径为../../public,但此代码不会运行。它返回一个404。

staticServer = new (static.Server)('../../public');
webServer = http.createServer(function (request, response) {
    staticServer.serve(request,response);
})
webServer.listen(appServerConfig.port, appServerConfig.address);

然而,如果我更改结构,使公共文件夹位于server.js旁边,并相应地更改代码,它就会起作用:

project
    system
        core
           server.js
           public
               ...public stuff here...

staticServer = new (static.Server)('./public');
webServer = http.createServer(function (request, response) {
    staticServer.serve(request,response);
})
webServer.listen(appServerConfig.port, appServerConfig.address);

为什么会这样?

请注意,使用相对路径将解析与node.js进程的当前工作目录(即运行node server.js时所在的目录)相关的路径。因此,正如编码的那样,只要在启动节点时您在core目录中,我就可以看到您的can。您确定始终从core目录启动节点吗?

如果您想独立于cwd(更健壮的IMHO),请使用__dirname获取当前文件的绝对目录路径,然后将相对路径添加到该路径:__dirname + '/../../public'

除此之外,考虑fs.realpath来解决这些问题。我不能说node-static是否特别有特殊的代码来防止这种情况,但我见过的大多数其他模块,如connect的静态中间件,都会很乐意在没有特殊限制的情况下为任何任意目录提供服务。

相关内容

  • 没有找到相关文章

最新更新