繁体   English   中英

节点静态无法为当前文件夹之上的文件夹提供服务

[英]node-static cannot serve a folder above current folder

我不知道这是对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目录中,对我来说就可以了。 您确定总是从core目录启动节点吗?

如果要独立于cwd(功能更强大的IMHO),请使用__dirname获取当前文件的绝对目录路径,然后使用相对路径: __dirname + '/../../public'

除此之外,请考虑使用fs.realpath来解决这些问题。 我不能说特定于节点的静态代码是否具有防止这种情况的特殊代码,但是我见过的大多数其他模块(例如connect的静态中间件)都会很高兴地为任意目录提供服务而没有特殊限制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM