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);

ただし、構造を変更して 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);

これはなぜですか?

4

1 に答える 1

5

相対パスを使用すると、node.jsプロセスの現在の作業ディレクトリ、つまり、を実行したときにいたディレクトリに関連するパスが解決されることに注意してくださいnode server.jscoreしたがって、コード化されているように、ノードを起動したときにディレクトリにいる限り、私には問題ないように見えます。常にcoreディレクトリからノードを起動してもよろしいですか?

cwd(より堅牢なIMHO)から独立したい場合は、を使用__dirnameして現在のファイルの絶対ディレクトリパスを取得し、それに相対パスを追加します__dirname + '/../../public'

それを超えて、それらを解決するためにfs.realpathを検討してください。特にnode-staticにこれを防ぐための特別なコードがあるかどうかはわかりませんが、connectの静的ミドルウェアなど、私が見た他のほとんどのモジュールは、特別な制限なしに任意のディレクトリを問題なく提供します。

于 2012-08-26T03:00:21.080 に答える