2013-10-13 45 views
0

由於某些原因,我似乎無法環繞我的大腦,每當我通過網絡發送Object時,其參數會從我通過網絡發送Object時的服務器當我讀到客戶端時。當通過網絡讀取對象時,對象參數發生變化

這裏的情景:

我測試了一個API來從數據庫中刪除用戶帳戶。您通過特殊格式的Object發送您的authTokenusername參數,服務器查詢數據庫,如果找到,您的用戶帳戶將被刪除。當一切都完美的作品,您的帳戶,服務器發送該字符串返回到你:

{ 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變量你在這裏看到的只是一個簡單的對象,它存儲所有的用戶信息的。

+2

問題不在於您引用的代碼中。我怎麼知道?因爲**東西**必須設置'type:'error''並且在你的問題中唯一出現的單詞'error'出現在你的示例無效響應中,在代碼中沒有任何地方。 –

+0

我添加了我正在使用的測試用例。這**應該是處理這一切的唯一代碼。 –

+0

@ZachDziura但它不是...... – Brad

回答

0

像往常一樣,我是一個白癡,不遵循我自己的API。

正在傳遞的callback函數有兩個參數:errresponse。我忘記了通過null作爲我的錯誤,所以代碼正在做它應該做的事情。 DOH!感謝大家的迴應!

相關問題