socket.io 中处理回调的正确方法
the correct way of handling callback in socket.io
免责声明:我对 Node 完全陌生.js Socket.io 这更像是一个 Javascript/通用编程问题,而不是 Node.js 特定问题,但由于它是用 Node 编写的.js我不得不在这里发布它。
我有这样的函数
configs.socket.on('device_pair_authorization', function(device, callback) {
var pair_token = device.pair_token;
var server_signature = device.server_signature;
if(pair_token && server_signature) {
var decipher = crypto.createDecipher('aes-256-cbc', 'SOME_KEY');
var decryptedSignature = decipher.update(server_signature, 'base64', 'utf8');
decryptedSignature = decryptedSignature + decipher.final('utf8');
deSigJSON = JSON.parse(decryptedSignature);
if(deSigJSON.user_id && deSigJSON.pair_token) {
if(deSigJSON.pair_token === pair_token) {
var server_handshake_token = deSigJSON.server_token;
if(server_handshake_token) {
//VALIDATED
var one_time_access_token = crypto.createHash('sha512').update([Math.random(), server_handshake_token, new Date()].join()).digest('base64');
var expires = new Date().getTime() + 60;
callback({
is_authorized: true,
one_time_access_token: one_time_access_token
});
}
callback({
is_authorized: false,
error: "Server Token Is Missing"
});
}
callback({
is_authorized: false,
error: "Pair Token is Incorrect"
});
}
callback({
is_authorized: false,
error: "Signature is corrupted"
});
}
callback({
is_authorized: false,
error: "Pair_Token or Server_Signature is missing"
});
});
整个想法是该函数是一个授权函数,为了防止欺诈,每个步骤都单独检查,如果在检查过程中出现问题,则使用特定的错误消息和 is_authorized=false 执行回调。如果一切顺利,则使用 is_authorized=true 执行回调并发回令牌。
我的问题是,代码对我来说看起来不整洁,我确信有一种方法可以修改此代码,以便不会多次编写回调,但我不知道为什么。
我想以更专业的方式重写代码。有什么建议吗?
这里不需要任何特殊的异步流帮助程序,只需正确格式化代码即可。但是你可以看看Q promise助手,Async.js和PubSubJS。
configs.socket.on('device_pair_authorization', function(device, callback) {
var pair_token = device.pair_token;
var server_signature = device.server_signature;
var errorCallback = function(error) {
callback({
is_authorized: false,
error: error
});
}
if(!pair_token || !server_signature) {
return errorCallback("Pair_Token or Server_Signature is missing")
}
var decipher = crypto.createDecipher('aes-256-cbc', 'SOME_KEY');
var decryptedSignature = decipher.update(server_signature, 'base64', 'utf8');
decryptedSignature = decryptedSignature + decipher.final('utf8');
deSigJSON = JSON.parse(decryptedSignature);
if(!deSigJSON.user_id || !deSigJSON.pair_token) {
return errorCallback("Signature is corrupted");
}
if(deSigJSON.pair_token !== pair_token) {
return errorCallback("Pair Token is Incorrect");
}
if(!deSigJSON.server_token) {
return errorCallback("Server Token Is Missing");
}
//VALIDATED
var server_handshake_token = deSigJSON.server_token;
var one_time_access_token = crypto.createHash('sha512').update([
Math.random(), server_handshake_token, new Date()
].join()).digest('base64');
var expires = new Date().getTime() + 60;
callback({
is_authorized: true,
one_time_access_token: one_time_access_token
});
});
相关文章:
- Google Data API上的OOP Javascript回调方法
- 有没有什么方法可以停止Jquery中的animate(也可以停止完整的回调函数)
- 对中的函数调用进行排序是回调的唯一方法
- Javascript:对回调创建的对象执行方法
- 如何向.apply()方法添加回调
- 在 Javascript 中实现解耦代码/回调的正确方法是什么?
- 一种在应用.appendTo()方法时使用回调函数的方法
- 与 promise 一起使用时,异步瀑布不执行下一个回调方法
- 从类方法中的 ajax post 函数回调函数更改 javascript 类属性
- 如何将回调函数添加到 .map 方法
- 传递promise回调方法的更好方法
- 将类方法绑定到类外绑定的事件处理程序内的AJAX成功回调
- 将方法作为回调传递
- Node.JS:类方法作为回调
- 将参数传递给 Ressource 的方法回调
- 从 javascript 对象方法回调中检索变量
- javascript设计模式-通过公共方法回调
- 如何在Nodejs中模拟外部依赖方法回调参数
- Javascript数组映射方法回调参数
- iCheck on()方法回调不起作用