2016-12-14 72 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;