JavaScript对象参数在通过网络读取时发生更改

JavaScript对象参数在通过网络读取时发生更改,javascript,node.js,Javascript,Node.js,由于某种原因,我似乎无法集中精力,每当我通过网络发送对象,它的参数都会发生变化,从我通过网络从服务器发送对象,到我在客户机上读取它 以下是场景: 我正在测试一个API以从数据库中删除您的用户帐户。在特殊格式的对象中发送authToken和username参数,服务器查询数据库,如果找到,则删除用户帐户。当一切正常运行时,您的帐户、服务器会将以下字符串发送回您: { header: { type: 'success' }, body: {} } 这就是所谓的普通成功开发。但是,当我从服务器读取返

由于某种原因,我似乎无法集中精力,每当我通过网络发送
对象
,它的参数都会发生变化,从我通过网络从服务器发送
对象
,到我在客户机上读取它

以下是场景:

我正在测试一个API以从数据库中删除您的用户帐户。在特殊格式的
对象中发送
authToken
username
参数,服务器查询数据库,如果找到,则删除用户帐户。当一切正常运行时,您的帐户、服务器会将以下字符串发送回您:

{ header: { type: 'success' }, body: {} }
这就是所谓的普通
成功开发
。但是,当我从服务器读取返回的字符串时,我得到以下结果:

{ header: { type: 'error' }, body: {} }
现在,似乎
类型
参数正在某个地方更改,但我不知道在哪里!下面是处理所有这些请求的相关代码:

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());
    }
  });
});
// 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;
user handler.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());
    }
  });
});
// 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
变量只是一个简单的对象,它存储了所有用户信息

像往常一样,我是个白痴,不遵循自己的API


正在传递的
回调
函数接受两个参数:
err
response
。我忘了传递
null
作为我的错误,所以代码正在做它应该做的事情。啊!谢谢大家的回复

问题不在您引用的代码中。我怎么知道?因为必须设置
类型:'error'
,而问题中出现
error
一词的唯一位置是示例无效响应,代码中没有。我添加了用于此的测试用例。这应该是处理这些问题的唯一代码。@ZachDziura但它不是。。。