[英]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
});
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.