如何将此javascript模块更改为显示模块模式?

如何将此javascript模块更改为显示模块模式?,javascript,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

我有以下代码:

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不是一个函数

我犯了什么错误


谢谢。

您忘记导出模块了

exports = server;

为什么要这样做?这只是时间上的倒退,在我们有好东西之前,比如实际的模块。你不是在导出
服务器
<代码>变量服务器=需要('./服务器')将导入一个空对象,因为您的模块不导出任何内容。你知道模块中的变量是模块的局部变量吗?其他模块只能访问导出的内容。因此,在这里添加IIFE以减少范围
start
不会增加任何值。这真的让代码变得不必要的复杂。你能解释一下你所说的“实际模块”是什么意思吗?我并没有试图让它变得不必要的复杂,但我认为揭示模块模式应该有助于实现这一点?