节点:将公开的函数分配给不同文件中的对象属性

时间:2017-02-23 03:49:28

标签: javascript node.js function properties

我有一个基于快速的REST API服务。一个API接收两个参数:

  • ID

API应该将def solve(a: Double, b: Double, c: Double): Option[(Double, Double)] = { val sqrtDiscriminant = Math.sqrt(b * b - 4 * a * c) val twiceA = a * 2 if (a == 0) None else Some( ((-b + sqrtDiscriminant) / twiceA, (-b - sqrtDiscriminant) / twiceA)) } 解析为一些细节,并为所有类型执行一系列常见任务。解析id的功能根据变量id而不同。

我尝试通过创建type参考文件来实现此目的,其中1 + n是包含解析ID流和所有常见任务的文件,1指的是包含特定分辨率函数的文件,用于基于类型的id。代码示例如下。

  • type1.js

    n
  • common.js

    module.exports.resolveId = function(id, callback) {...callback};
    module.exports.otherFunctions....
    

执行到行var type1Lib = require('./type1.js'); var resFunc = {type1:typeLib.resolveId}; function performTasks(id, type, callback) { async.auto( resolve:function(cb) { resFunc[type](id, cb); }, otherFunc:['resolve', function(cb) {cb}] }, callback) } 后,代码崩溃,因为resFunc[type](id, cb)未定义。

我试图在type1.js

中首先声明该函数
resFunc[type]

但这也没有帮助。

我错过了一些非常基本的东西吗?

1 个答案:

答案 0 :(得分:0)

如果您的变量type类似于1,2,3 ......那么您的需求调用应该在performTasks正文中:

function performTasks(id, type, callback) {
  var resFunc = require('./type' + type); // and, no extension needed here
  async.auto(
    resolve:function(cb) {
      resFunc(id, cb);
    },
    otherFunc:['resolve', function(cb) {cb}]
  }, callback)
}

你的模块将是:

function resolveId (id, callback) {...callback};
module.exports = resolveId; 

或者您可以提前require所有模块:

var resFuncs = {
  1: require('./type1'),
  2: require('./type2'),
  3: require('./type3')
};

function performTasks(id, type, callback) {
  async.auto(
    resolve:function(cb) {
      resFuncs[type](id, cb);
    },
    otherFunc:['resolve', function(cb) {cb}]
  }, callback)
}

修改

' module.exports'它只是模块文件中定义的变量,它正是require()调用返回的内容。您可以为其分配单个函数,也可以为包含多个变量,对象或函数的对象分配。