在这个例子中,有一个带有null和false参数的fn函数:
io.configure(function () {
function auth (data, fn) {
fn(null, false);
};
io.set('authorization', auth);
});
https://github.com/LearnBoost/Socket.IO-node/blob/master/test/manager.test.js#L400-403
什么是fn
以及它做了什么?
它只是意味着,示例函数,在这里粘贴你自己的函数,还是它意味着什么呢?
答案 0 :(得分:3)
在此示例中,fn
是一个作为参数传递给auth()
的函数,所以是的,您为auth()
提供了一些您自己选择的功能。这称为“高阶函数”,有关简短介绍,请参阅here。这是一种主要与functional programming相关联的技术,并且由于Javascript的面向对象通常被认为有点弱,因此Javascript中的高级程序往往会出现(Javascript有时被称为“Scheme in Java's clothing “)
在这个确切的代码中:它是测试套件的一部分,因此它将io
配置为总是失败授权,以便看到授权失败得到优雅处理(目前408-409行):< / p>
res.statusCode.should.eql(403);
data.should.match(/handshake unauthorized/);
应该无异常地到达这些行,并且测试会检查结果是否包含有意义的值。
答案 1 :(得分:0)
fn
是作为参数传递给auth
的函数。
auth
函数is called here:
Manager.prototype.authorize = function (data, fn) {
if (this.get('authorization')) {
var self = this;
this.get('authorization').call(this, data, function (err, authorized) {
self.log.debug('client ' + authorized ? 'authorized' : 'unauthorized');
fn(err, authorized);
});
} else {
this.log.debug('client authorized');
fn(null, true);
}
return this;
};
因此,您会看到回调函数接受两个参数err
和authorized
。在测试中,这些参数设置为null
和false
。
很可能在某些时候你可以指定fn
应该是什么,但这不一定是!也可能是这个函数总是由库提供,在设置auth
函数时调用它是你的工作。