2012-01-30 5 views
0

昨日私はNode.jsで少し演奏しました。私の最初のアイデアは、このようにいくつかのjsファイルを含むHTMLページをロードするシンプルなWebサーバーです:私のnode.jsシンプルなWebサーバーは親フォルダにアクセスしません

var http = require('http'), 
    fs = require('fs'), 
    path = require('path'); 

http.createServer(function(request, response) { 
    console.log('request starting for: ' + request.url); 
    var filePath = path.join('.', request.url); 
    if (filePath === './') { 
     filePath = './aPage.html'; 
    } 

    path.exists(filePath, function(exists) { 
     if (exists) { 
      var extname = path.extname(filePath); 
      var contentType = 'text/html'; 
      switch (extname) { 
      case '.js': 
       contentType = 'text/javascript'; 
       break; 
      case '.css': 
       contentType = 'text/css'; 
       break; 
      } 

      fs.readFile(filePath, function(error, content) { 
       if (error) { 
        response.writeHead(500); 
        response.end(); 
       } 
       else { 
        response.writeHead(200, { 
         'Content-Type': contentType 
        }); 
        response.end(content, 'utf-8'); 
       } 
      }); 
     } 
     else { 
      console.log('Something goes wrong ;('); 
      response.writeHead(404); 
      response.end(); 
     } 
    }); 
    console.log('Server running!'); 
}).listen('8080', '0.0.0.0'); 

などすべてが機能します。


... 

var filePath = path.join('..', request.url); 
    if (filePath === '../') { 
     filePath = '../aPage.html'; 
    } 
... 

しかしpath.exists()はhtmlページおよびその他のファイルの存在を確認するために失敗します。

私は、これはサブディレクトリにスクリプトを置くJSにラインを変更することを決めました。

私は自分の過ちが何であるか教えてください(私はそれが些細な変更であったと思いました)?

ありがとうございました。

答えて

4

おそらく、jsスクリプトをサブディレクトリではなく親フォルダから直接実行しようとしていると思います。例えば

:ファイルがあるなぜあなたはディレクトリfooであり、あなたのserver.jsはサブディレクトリbarであれば、
は、あなたがnode bar/server.jsを実行した場合、その後、..ではなく、バーの親の、FOOの親を指すようになります、それはです見つかりません。

foo 
    +---bar 
    |  +----- server.js 
    +---- aPage.html 

あなたはbarcdしようとnode server.jsを実行することができます。

と変更するか、__dirname/../aPage.htmlに変更してください(スクリプトの../aPage.html__dirname/../aPage.htmlに変更してください)。

PS:絶対パスを取得するにはpath.resolveを使用できます。

+0

ありがとう、私は私のc9.ioプロジェクトの中にあり、私はideからノードを実行しているので、私はそれを認識していない! – Dario

関連する問題