将选项传递给节点模块以供导出函数使用

Passing options to node module for export functions to use

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

例如,使用 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'”。我怀疑这与我使用 exports 两次有关,但我试图弄清楚如何构建我的模块的 js 文件以便能够在传递这些选项时使用这些选项并将它们应用于公开的函数。

感谢任何帮助,谢谢!

您需要 return 来自导出函数的对象。

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