如何为Node.js创建模块?

dai*_*ail 23 javascript node.js

我有一个简单的代码:

var http = require("http");

var server = http.createServer(function(request, response) {
    response.writeHead(200, {"Content-Type" : "text/html"});
    response.write("Hello World");
    response.end();
});

server.listen(8000);

console.log("Server has started.");
Run Code Online (Sandbox Code Playgroud)

我想将此代码放入server.js.此代码必须是具有许多内部功能的MODULE.我想在其中创建server模块和listen()功能.

我应该把createServer()一个函数放在里面listen().

如果我有index.js我怎么能调用这个模块然后做类似的事情server.listen()

Aln*_*tak 58

nodejs模块的常见模式是创建一个文件(例如mymodule.js),所以:

var myFunc = function() {
   ...
};

exports.myFunc = myFunc;
Run Code Online (Sandbox Code Playgroud)

如果将其存储在目录中node_modules,则可以导入它:

var mymodule = require('mymodule');

mymodule.myFunc(args...);
Run Code Online (Sandbox Code Playgroud)

因此,在您的情况下,您的模块server.js可能如下所示:

// server.js
var http = require("http");

var listen = function(port) {
    var server = http.createServer(function(request, response) {
        response.writeHead(200, {"Content-Type" : "text/html"});
        response.write("Hello World");
        response.end();
    });
    server.listen(port);
};

exports.listen = listen;
Run Code Online (Sandbox Code Playgroud)

将被调用:

// client.js
var server = require('server');
server.listen(8000);
Run Code Online (Sandbox Code Playgroud)

  • 是否可以导入存储在磁盘上特定位置的模块(即`/ home/username/Desktop`),而不是导入`node_modules`文件夹? (3认同)

zer*_*ius 5

旧帖子,但是如果仍然有人感兴趣,我建议采取以下解决方案:

//server.js

var http = require("http");

// As soon as method will be used outside the module, use "this":

this.listen = function(port) {
    var server = http.createServer(function(request, response) {
        response.writeHead(200, {"Content-Type": "text/html"});
        response.write("Hello World");
        response.end();
    });
    server.listen(port);
};


//index.js

var module = require('./server');
module.listen(8000);
Run Code Online (Sandbox Code Playgroud)


Ray*_*nos 3

// main.js
var server = require("server");

server.listen(8000);

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


// server.js

var http = require("http");

var server = http.createServer(function(request, response) {
    response.writeHead(200, {
        "Content-Type": "text/html"
    });
    response.write("Hello World");
    response.end();
});

module.exports = server;
Run Code Online (Sandbox Code Playgroud)

  • FWIW,我不希望仅仅“要求”一个模块实际上会像这段代码那样产生副作用(例如实例化服务器)。 (4认同)