由於某些原因,我似乎無法環繞我的大腦,每當我通過網絡發送Object
時,其參數會從我通過網絡發送Object
時的服務器當我讀到客戶端時。當通過網絡讀取對象時,對象參數發生變化
這裏的情景:
我測試了一個API來從數據庫中刪除用戶帳戶。您通過特殊格式的Object
發送您的authToken
和username
參數,服務器查詢數據庫,如果找到,您的用戶帳戶將被刪除。當一切都完美的作品,您的帳戶,服務器發送該字符串返回到你:
{ header: { type: 'success' }, body: {} }
這是被稱爲純SuccessEnvelope
。然而,當我從服務器讀取返回的字符串,我得到這個:
{ header: { type: 'error' }, body: {} }
現在,似乎type
參數被改變的地方,但我不知道在哪裏!下面你會發現它處理所有這些請求的相關代碼:
server.js
server = net.createServer(function(socket) {
socket.on("data", function(data) {
try {
// Accept Envelope from client
var input = new Envelope(data.toString());
if (input.verify()) { // Make sure client Envelope has correct data
switch (input.header.type) { // Route commands based on Envelope "type"
case "user":
userHandler.parseEnvelope(input, function(err, res) {
if (err) {
socket.write(errors.parseError(err).toString());
} else {
socket.write(res.toString());
}
});
break;
default:
socket.write(new Envelope().toString());
break;
}
} else {
socket.write(errors.parseError(
new errors.MissingHeaderDataError()).toString());
}
} catch (err) {
socket.write(errors.parseError(err).toString());
}
});
});
用戶handler.js
// removing some of the unnecessary stuff
case "delete":
// Make sure user provided all necessary information.
if (!header.token || !body.username) {
return callback(new errors.MissingEnvelopeDataError("Missing the 'token' and/or
'username' parameter(s) in header and/or body, respectively"));
} else {
// Delete the user's account. So sad to see them go... :'(
User.findOne({"token": header.token, "username": body.username}, "+token +_id",
function(err, user) {
if (err) {
return callback(err);
} else {
user.remove(function(err) {
if (err) {
return callback(err);
} else {
// Everything went according to plan. Return a SuccessEnvelope to the user.
callback(new SuccessEnvelope());
}
});
}
});
}
break;
誰能明白我做錯了嗎?任何幫助都會很棒。提前致謝!
編輯:這可能也是一個好主意,包括我的測試案例...
deleteUser = {
"header": {
"type": "user",
"method": "delete",
"token": ""
},
"body": {
"username": ""
}
}
describe("Delete user", function() {
it("should return a MissingEnvelopeDataError when deleting a user without a token or
username", function(done) {
connection.write(JSON.stringify(deleteUser));
connection.on("data", function(res) {
res = JSON.parse(res.toString());
res.header.should.have.property("type", "error");
res.header.should.have.property("errorType", "MissingEnvelopeDataError");
done();
});
});
it("should return a SuccessEnvelope when deleting a user", function(done) {
deleteUser.header.token = user.token;
deleteUser.body.username = user.username;
connection.write(JSON.stringify(deleteUser));
connection.on("data", function(res) {
res = JSON.parse(res.toString());
console.dir(res);
res.header.should.have.property("type", "success");
// res.body.should.be.empty
(function() {
if (Object.keys(res.body).length == 0) {
return true;
} else {
return false;
}
})();
done();
});
});
});
的user
變量你在這裏看到的只是一個簡單的對象,它存儲所有的用戶信息的。
問題不在於您引用的代碼中。我怎麼知道?因爲**東西**必須設置'type:'error''並且在你的問題中唯一出現的單詞'error'出現在你的示例無效響應中,在代碼中沒有任何地方。 –
我添加了我正在使用的測試用例。這**應該是處理這一切的唯一代碼。 –
@ZachDziura但它不是...... – Brad