如何将此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 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
我正在犯什么错误?
谢谢。
答
你忘了导出模块
exports = server;
为什么这样做?这只是及时倒退,到我们有好的东西之前,比如实际的模块。 – ndugger
您未输出'server'? 'var server = require('./ server');''会导入一个空的对象,因为你的模块没有'导出'任何东西。你知道模块中的变量是* local *模块吗?只有导出的内容可以被其他模块访问。因此,在这里添加一个IIFE来减少'start'范围并不会增加任何价值。它真的只是使代码不必要的复杂。 –
您能否提供一些关于“实际模块”的含义的解释?我并没有试图让它变得不必要的复杂,但我认为“揭示模块模式”应该可以帮助解决这个问题? – Sako73