我不知道这是对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);
为什么会这样?
答案 0 :(得分:5)
请注意,使用相对路径将解析相对于node.js进程的当前工作目录的那些路径,即运行node server.js
时所在的目录。所以编码后,只要您在启动节点时位于core
目录中,您就可以看起来没问题了。您确定始终从core
目录启动节点吗?
如果你想独立于cwd(更强大的恕我直言),使用__dirname
获取当前文件的绝对目录路径,然后确定相对路径:__dirname + '/../../public'
。
除此之外,请考虑fs.realpath来解决这些问题。我不能说node-static是否有特殊的代码来阻止这种情况,但是我见过的大多数其他模块如connect的静态中间件都会很乐意为任意目录服务而没有特殊限制。