JavaScript 对象参数在通过网络读取时更改
JavaScript Object parameters changing when reading them over network
由于某种原因,我似乎无法动脑筋,每当我通过网络发送Object
时,它的参数都会从我通过网络从服务器发送Object
时更改为我在客户端上读回它时。
场景如下:
我正在测试一个 API 以从数据库中删除您的用户帐户。您以特殊格式的Object
发送authToken
和username
参数,服务器将查询数据库,如果找到,您的用户帐户将被删除。当一切正常时,您的帐户,服务器会将此字符串发回给您:
{ header: { type: 'success' }, body: {} }
这就是所谓的普通SuccessEnvelope
。但是,当我从服务器读取返回的字符串时,我得到这个:
{ header: { type: 'error' }, body: {} }
现在,似乎type
参数正在某处更改,但我不知道在哪里!您将在下面找到处理所有这些请求的相关代码:
服务器.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());
}
});
});
用户处理程序.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
变量只是一个简单的对象,它存储所有用户信息。
像往常一样,我是个白痴,不遵循我自己的API。
传递的callback
函数采用两个参数:err
和 response
。我忘记将null
作为我的错误传递,因此代码正在执行它应该做的事情。咚!谢谢大家的回复!
相关文章:
- 从桌面读取python文件时高亮显示代码
- Javascript-如何读取json文件中的列并将其保存在Javascript数组中
- 使用Dnamics CRM 2011中的JavaScript读取子网格的所有记录,而不考虑活动页面
- 通过Magento的网络服务检索运费
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- TypeError:无法读取属性'推'未定义的JavaScript
- 同样,同样的错误'ahorcado.js:26未捕获类型错误:无法读取属性'beginPath'
- Google/html5语音识别JavaScript SDK Chrome网络工具包SpeechRecognition
- 未捕获的TypeError无法读取未定义的属性socialsharing
- 如何在读取XLS/XLSX本地文件时,使用IE的javascript代码启用未标记为安全的ActiveX控件
- 使用acess代币登录Facebook,并通过网络应用程序离线发布
- 通过网络浏览器从 URL javascript 读取文件
- 使用 php 从网络服务器读取时返回空的 JSON 文件
- 不使用本地/网络服务器读取 xml
- JavaScript 对象参数在通过网络读取时更改
- 无法读取属性'type'cordova网络插件中的未定义错误
- 无法读取属性'力'未定义的(简单D3网络图)
- 从网络计算机上启用智能卡的登录中读取windows用户名
- Flash ActionScript如何使用网络摄像头读取手势
- 在网络上读取 PNG 元数据