我有一个基于快速的REST API服务。一个API接收两个参数:
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]
但这也没有帮助。
我错过了一些非常基本的东西吗?
答案 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()调用返回的内容。您可以为其分配单个函数,也可以为包含多个变量,对象或函数的对象分配。