客戶端發送一組JSON消息存儲在Nodejs服務器上;但是客戶端需要對每條消息進行一些確認(通過唯一的ID),確保它正確存儲在服務器上,因此不需要再次發送。處理髮布到Nodejs服務器的JSON消息數組的最佳方式是什麼?
在服務器我想通過它來解析JSON數組,然後循環,存儲在數據庫的每個消息,在JSON數組命名爲響應此消息存儲響應,最後發送這個迴應陣列到客戶端。但由於數據庫操作是異步的,所有其他代碼在數據庫存儲方法返回任何結果之前執行。我的問題是如何不斷更新響應數組,直到所有數據庫操作完成?
var message = require('./models/message');
var async = require('async');
var VALID_MESSAGE = 200;
var INVALID_MESSAGE = 400;
var SERVER_ERROR = 500;
function processMessage(passedMessage, callback) {
var msg = null;
var err = null;
var responses = [];
isValidMessage(passedMessage, function(err, result) {
if(err) {
callback(createResponse(INVALID_MESSAGE, 0));
}else{
var keys = Object.keys(result);
for(var i=0, len = keys.length; i<len; i++) {
async.waterfall([
//store valid json message(s)
function storeMessage(callback) {
(function(oneMessage) {
message.processMessage(result[i], function(res) {
callback(res, result[i].mid, callback);
});
})(result[i]);
console.log('callback returns from storeMessage()');
},
//create a json response to send back to client
function createResponse(responseCode, mid, callback) {
var status = "";
var msg = "";
switch(responseCode) {
case VALID_MESSAGE: {
status = "pass";
msg = "Message stored successfuly.";
break;
}
case INVALID_MESSAGE: {
status = "fail";
msg = "Message invalid, please send again with correct data.";
break;
}
case SERVER_ERROR: {
status = "fail";
msg = "Internal Server Error! please contact the administrator.";
break;
}
default: {
responseCode = SERVER_ERROR;
status = "fail";
msg = "Internal Server Error! please contact the administrator.";
break;
}
}
var response = { "mid": mid, "status": status, "message": msg, "code": responseCode};
callback(null, response);
}
],
function(err, result) {
console.log('final callback in series: ', result);
responses.push(result);
});
}//loop ends
}//else ends
console.log('now we can send response back to app as: ', responses);
});//isValid finishes
}
感謝例如,現在從數據庫模型中的每個回報,我檢查密鑰長度在最終回調之前,它已經工作。 – hash