當我發佈到服務器時,無論我給auth函數的信息如何,它都會返回true。我的直覺是,我試圖做同步的事情,這本質上是異步的,但我不知道如何解決它。這個咖啡代碼爲什麼總是返回true?
auth = (username, api_key, device) ->
hashed_key = hash.sha256(username + api_key + device, salt)
winston.debug('Checking auth for ' + username)
redis_client.get hashed_key, (err, data) ->
if data == username
true
# Main Handler for posting data for a device.
server.post "/:customer/:site/:device", create = (req, res, next) ->
message = JSON.parse(req.body)
winston.info(server.name + ': Recieved event from ' + req.params.device)
authenticated = auth(message.username, message.api_key, message.device)
winston.debug('****' + authenticated)
if authenticated == true
winston.debug('Auth passed, got a valid user/device/api combination: ' + message.username)
redis_client.publish('device_events', req.body)
return next()
else
winston.debug('Auth failed, cant find device ' + message.device + ' for ' + message.username)
return next(restify.NotAuthorizedError)
謎語我這個;如果你在auth中添加一個else false,它的行爲是否會改變? – Menztrual
否 - 沒有任何區別,這使我認爲auth作爲其函數聲明是真實的,但是它沒有被執行,或者沒有及時完成...... –
您的預感是正確的。你的'auth'函數會在*'redis_client.get'執行之前返回*,這就是爲什麼它需要回調。你不能從回調中返回,因爲你不在同一個範圍內。看到[這個答案](http://stackoverflow.com/questions/9310855/get-and-get-value/9310916#9310916)我的一個類似的情況和[這個答案](http://stackoverflow.com/問題/ 9362823/why-a-function-and-a-callback-non-blocking-in-node-js/9363071#9363071)解釋爲什麼會使用這種範式。 –