我正在使用ajax-request包通过Node.js应用程序中的发布请求发送Json数据。相关代码段如下所示:
logMessage : function(url, message, next) {
var d1 = message["sender"];
var d2 = { id: message[sender"]["id"], name: message["sender"]["name"], email: message["sender"]["email"] };
console.log(d1); // Both outputs look
console.log(d2); // exactly the same
request.post({ url: url, headers: {}, data: d1 }, function (error, response, body) {
//Check for error
if(error){
next(null, {}); // I'm not worried if the logging fails
}
//Check for right status code
if(response.statusCode !== 200){
next(null, {}); // I'm not worried if the logging fails
}
next(null, {}) // All good
});
}
问题是我得到一个
RangeError: Maximum call stack size exceeded
。 message
对象绝对不包含任何循环引用,并且message
既不大也不嵌套。当我使用伪数据或向下钻取基本数据类型时,该调用工作正常,即以下工作正常data: { 'test': [1, 2, 3]}
data: message['sender']['name']
data: message['sender']['email']
但是,尽管
data: message['sender']
仅包含带有两个简单字符串的对象,却已经失败了。解决方法
data: JSON.stringify(message)
可以工作,但是我仍然想了解问题所在。编辑:我已经添加了
d1
和d2
到应该相同的对象,并且console.log
输出看起来确实完全相同。但是,data: d2
正常工作,而data: d1
无效EDIT2:
JSON.parse(JSON.stringify(message))
作为另一种解决方法也可以完成这项工作。我想我的message
对象不是我想的那样。 最佳答案
ajax-request
模块可能无法序列化对象。您确实意识到message
不是作为对象发送的,必须将其转换为字符串格式才能发送。另外,我不确定是否可以序列化该数据,因为没有可以嵌套名称的表单输入。
您可以尝试使用经过更多测试的模块,例如request或仅使用JSON。
关于javascript - 使用Node.js发送Json时“超出了最大调用堆栈大小”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46126366/