Node.js 将选项传递给要使用的导出函数的节点模块

Node.js 将选项传递给要使用的导出函数的节点模块,node.js,node-modules,Node.js,Node Modules,我正在创建一个节点模块,希望该模块的最终用户能够向其传递将对模块功能产生影响的配置选项 例如,使用express,您可以创建一个express应用程序,并将其按如下方式传递给您的路线: const express = require('express'); const app = express(); require('./api/routes/login)(app) 然后在路由文件中,您可以使用该应用程序->/api/routes/login //login.js module.ex

我正在创建一个节点模块,希望该模块的最终用户能够向其传递将对模块功能产生影响的配置选项

例如,使用express,您可以创建一个express应用程序,并将其按如下方式传递给您的路线:

const express = require('express');
const app = express();

require('./api/routes/login)(app)
然后在路由文件中,您可以使用该应用程序->/api/routes/login

//login.js

  module.exports = function(app){

   app.get('/login', function(req, res){//blah}

  }
因此,我在模块中尝试做的是类似的事情,最终用户可以为模块的函数传递可选的配置参数以供使用。这是我正在尝试的

在我的模块文件中:

const default_options = {"enabled":true}
module.exports = function(options) {
const options = options || default_options

exports.login = function(credentials) {
if(options.enabled == true){
 //do something
 }else{
    //do something else
  }
 }

}
然后,使用该模块的用户将能够执行以下操作:

//some js file
 var options = {"enabled":false}
 const mod = require('mymodule')(options)

 mod.login(creds)
我得到的错误是“无法读取未定义的”的属性“login”。我怀疑这与我使用导出两次有关,但我试图找出如何构造模块的js文件,以便在传递这些选项并将其应用于公开函数时能够使用这些选项


非常感谢您的帮助,谢谢

您需要从导出的函数返回一个对象

const default_options = {"enabled":true}
module.exports = function(options) {
    const options = options || default_options
    return {
        login: function(credentials) {
            ...
        }
    }
}

您需要从导出的函数返回一个对象

const default_options = {"enabled":true}
module.exports = function(options) {
    const options = options || default_options
    return {
        login: function(credentials) {
            ...
        }
    }
}

现在还不清楚你真正的问题是什么。你能详细说明一下你尝试了什么以及你被困在哪里吗?请看和。@PaulKertscher对不起,我在打字之前不小心按下了“发布”按钮。现在还不清楚您的实际问题是什么。你能详细说明一下你尝试了什么以及你被困在哪里吗?请看和。@PaulKertscher抱歉,我在完成打字之前不小心按下了“发布”按钮。这很好,是否有必要将“选项”设置为可选?例如:const mod=require('mymodule');当我这样做时,它会说函数不存在,因为我没有传递该参数来触发export。如果您使用的是ES6,那么您也可以使用默认参数。这很有效,有没有让“选项”成为可选的?例如:const mod=require('mymodule');当我这样做时,它会说函数不存在,因为我没有传递该参数来触发export。如果您使用的是ES6,那么您也可以使用默认参数。