我不知道这是否是 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);
但是,如果我更改结构以使公共(public)文件夹位于 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
时所在的目录。因此,按照编码,只要启动 Node 时位于 core
目录中,您看起来就可以。您确定始终从 core
目录启动 Node 吗?
如果您想独立于 cwd(更强大的恕我直言),请使用 __dirname
获取当前文件的绝对目录路径,然后附加到该文件的相对路径: __dirname + '/../../public'
.
除此之外,请考虑 fs.realpath来解决这些问题。我不能说 node-static 是否有特殊的代码来防止这种情况,但我见过的大多数其他模块(例如 connect 的静态中间件)将很乐意为任何任意目录提供服务,而没有特殊限制。
关于javascript - Node 静态无法为当前文件夹之上的文件夹提供服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12127084/