2

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

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

server.js位于core目录中,将路径设为publicas ../../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);

为什么会这样?

4

1 回答 1

5

请注意,使用相对路径将解析相对于 node.js 进程的当前工作目录的那些路径,即运行时所在的目录node server.js。因此,按照编码,只要您在core启动节点时位于目录中,对我来说就可以了。你确定你总是从core目录启动节点吗?

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

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

于 2012-08-26T03:00:21.080 回答