2016-12-14 6 views
-1

私は、次のコードを持っている:このjavascriptモジュールを明らかにするモジュールパターンに変更するにはどうすればよいですか?

server.js:

var http = require("http"); 

function start() { 
    function onRequest(request, response) { 
     console.log("Request received."); 
     response.writeHead(200, { "Content-Type": "text/plain" }); 
     response.write("Hello World"); 
     response.end(); 
    } 

    http.createServer(onRequest).listen(8888); 

    console.log("Server has started."); 
} 
exports.start = start; 

index.js:私は暴露のモジュールパターンにserver.jsをオンにしてみてください

var server = require('./server'); 
server.start(); 

var http = require("http"); 

var server = function() { 
    function start() { 
     function onRequest(request, response) { 
      console.log("Request received."); 
      response.writeHead(200, { "Content-Type": "text/plain" }); 
      response.write("Hello World"); 
      response.end(); 
     } 

     http.createServer(onRequest).listen(8888); 

     console.log("Server has started."); 
    } 

    return { 
     start: start 
    }; 
}(); 

ですが、エラーが発生します:TypeError: server.start is not a function

私は間違いをしていますか?

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

+2

をエクスポートするのを忘れましたか?これは、実際のモジュールのような素敵なものが出る前に、時を経て後退しています。 – ndugger

+5

あなたは 'server'をエクスポートしていませんか? 'var server = require( './ server');'は、あなたのモジュールが何も 'export 'しないので、空のオブジェクトをインポートします。あなたは、モジュール内の変数はモジュールに対して*ローカルであることを知っていますか?エクスポートされたものだけが他のモジュールからアクセスできます。したがって、ここでIIFEを追加してスコープ 'start'を減らしても、値は追加されません。コードを不必要に複雑にするだけです。 –

+0

「実際のモジュール」の意味を説明していただけますか?私はそれを不必要に複雑にしようとはしていませんが、Revealing Module Patternがそれを手伝ってくれると思いましたか? – Sako73

答えて

2

あなたはこれを行うなぜ、あなたのモジュール

exports = server; 
関連する問題