2012-12-09 108 views
3

我正在研究非常簡單的node.js項目以更好地理解其回調函數。瞭解node.js回調結構

假設我有一個登錄「系統」這樣一個位置:

if(req.query["username"] == "john" && req.query["password"] == "smith") { 
    req.session.gatekeeper = req.query["username"]; 
    res.end("succesfully logged in"); 
} else { res.end("wrong username or password"); } 

到目前爲止,那麼容易。現在假設不是簡單地使用「john:smith」,而是將它存儲在redis上。用PHP我已經做了這種方式:

if($r->get("$usernameIn") == $passwordIn) { 
    $_SESSION['gatekeeper'] = $usernameIn; 
    echo "succesfully logged in"; 
} 

但現在,通過在看看Redis的文檔(https://github.com/mranney/node_redis/)爲節點,我看到得到的命令是這樣的:

client.get("foo", function(err, reply) { 
    console.log(reply); 
}); 

它真的很複雜,我聽不懂如何「結構」我提供了這最後一個第一個代碼。

任何幫助?提前致謝。

+0

你想讓你的redis查詢適合你的第一個代碼嗎?你把(或打算放入)'foo'是什麼價值? – Matt

+0

是的。在「富」我想把req.query [「用戶名」] –

+0

在redis –

回答

2

幾乎node.js中的所有內容都是異步的。所以,幾乎所有被調用的方法都必須指定一個回調方法來處理方法調用的結果。通常,回調函數有兩個參數:錯誤,結果。因此,您需要檢查錯誤並處理結果。還有其他節點模塊允許使用更簡潔的代碼(​​),但這不在您的問題的範圍之內。

作爲免責聲明,我之前沒有使用過redis,所以我的代碼示例基於上面的代碼示例以及redis node.js模塊的快速概述。

var redis = require("redis"), 
    client = redis.createClient(); 

client.on("connect", function() { 
    client.get(userName, function(err,returnedPassword){ 

     if(password === returnedPassword) { 
     req.session.gatekeeper = req.query["username"]; 
     res.end("succesfully logged in"); 
     } else { 
     res.end("wrong username or password"); 
     } 
    }); 
}); 
+0

涼爽,謝謝!精神上進入這種異步狀態仍然有點困難,來自php。無論如何,你應該看看redis,它像node.js –

+0

這樣的麪包和黃油。就個人而言,我認爲當你連續有多個時,回調有點難以閱讀。我非常喜歡承諾。我通常使用https://github.com/kriszyp/node-promise。這裏是人們在談論他們的stackoverflow的鏈接:http://stackoverflow.com/questions/4296505/understanding-promises-in-node-js – pgreen2