2016-12-14 89 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:

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

我力圖把server.js變成揭示模塊模式:

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');''會導入一個空的對象,因爲你的模塊沒有'導出'任何東西。你知道模塊中的變量是* local *模塊嗎?只有導出的內容可以被其他模塊訪問。因此,在這裏添加一個IIFE來減少'start'範圍並不會增加任何價值。它真的只是使代碼不必要的複雜。 –

+0

您能否提供一些關於「實際模塊」的含義的解釋?我並沒有試圖讓它變得不必要的複雜,但我認爲「揭示模塊模式」應該可以幫助解決這個問題? – Sako73

回答

2

你忘了導出模塊

exports = server;