2012-08-26 36 views
2

我不知道這是否是對node-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); 

爲什麼會這樣呢?

+0

'console.log(path.resolve('../../ public'||'。'))'給你什麼? – ebohlman

+0

@ebohlman它給了我解決公共文件夾 – Joseph

回答

5

請注意,使用相對路徑將解析相對於node.js進程的當前工作目錄的那些路徑,即您在運行node server.js時所處的目錄。所以就像編碼一樣,只要您在啓動節點時位於core目錄中,您就可以看到我。你確定你總是從core目錄啓動節點嗎?

如果您希望獨立於cwd(更強大的IMHO),請使用__dirname獲取當前文件的絕對目錄路徑,然後找到相對路徑:__dirname + '/../../public'

除此之外,請考慮fs.realpath來解決這些問題。我不能說node-static是否有特殊的代碼來防止這種情況發生,但是我見過的大多數其他模塊,比如connect的靜態中間件,都可以很好地爲任意目錄服務,沒有特別的限制。

+0

的絕對位置。我的'server.js'由核心目錄之外的另一個文件運行,這導致了問題。 – Joseph

+0

賓果男人,沒有意識到一個'/'會幫助我這麼多知道他們是相對於文件被調用時。 –