首页 > 解决方案 > 模块包装功能问题

问题描述

我正在尝试学习 node.js,但在运行带有模块包装函数的代码时遇到了问题。这是代码

记录器.js (1)

var url = 'http://mylogger.io/log';

function log(message) {
    
    console.log(message);
}

module.exports.log = log;

logger.js(2)

( function (exports, require, module, __filename, __dirname)
{
    var url = 'http://mylogger.io/log';

    function log(message) {
        
        console.log(message);
    }

    module.exports.log = log;
})

应用程序.js

const logger = require('./logger.js')
console.log(logger);
logger.log('Hiya');

logger.js(1) 工作正常,logger.js(2) 给出以下错误。

TypeError: logger.log is not a function
    at Object.<anonymous> ()
    at Module._compile (node:internal/modules/cjs/loader:1092:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1121:10)
    at Module.load (node:internal/modules/cjs/loader:972:32)
    at Function.Module._load (node:internal/modules/cjs/loader:813:14)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:76:12)
    at node:internal/main/run_main_module:17:47

我期望从这两种情况下得到相同的结果

标签: node.js

解决方案


在您附加为 的片段中logger.js(2)
function (exports, require, module, __filename, __dirname)与 NodeJS 编译器无关,也没有意义。

执行您期望的正确方法是logger.js(1)
如果您要导出多个函数中列出的方法,

var url = 'http://mylogger.io/log';

function log(message) {
    console.log(message);
}

function log_twice(message) {
    console.log(message);
    console.log(message);
}

module.exports = { log: log, log_twice: log_twice }; //and so on

如果有帮助,请求接受答案...


推荐阅读