编辑
确保不要并列请求和响应对象。如果你不这样做,事情会更容易。
我正在尝试将具有两个输入的表单中的数据发布到特定的 url 节点响应。最初我使用 javascript xmlHTTPrequest 对象来发送它。数据已收到,但节点永远无法读取我尝试发送的 JSON 格式的对象。这是我将其转换为字符串时的样子:
{ output: [],
outputEncodings: [],
writable: true,
_last: false,
chunkedEncoding: false,
shouldKeepAlive: true,
useChunkedEncodingByDefault: true,
_hasBody: true,
_trailer: '',
finished: false,
socket:
{ _handle:
{ writeQueueSize: 0,
socket: [Circular],
onread: [Function: onread] },
_pendingWriteReqs: 0,
_flags: 0,
_connectQueueSize: 0,
destroyed: false,
errorEmitted: false,
bytesRead: 8442,
bytesWritten: 1669569,
allowHalfOpen: true,
writable: true,
readable: true,
这不是完整的字符串。我转而使用 ajax 发布请求,因为我认为 serializearray() 可能会创建节点可以读取的不同格式,但它是相同的。我的服务器端代码基本上只是:
function email(request, response)
form = '';
request.setEncoding("utf8");
request.on('data', function(chunk) {
console.log('data received');
form += chunk.toString();
});
request.on('end', function() {
console.log('done receiving post data');
});
我的表格看起来像这样
<form name="email" action="javascript:true;">
<input type="text" name="address" value="Enter your email address" onFocus="this.value=''">
<input class="special" type="text" name="honeypot">
<input type="submit" value="submit">
</form>
如果我尝试使用 JSON.parse 解析,则会出现由意外导致的错误 o
如果我尝试使用 querystring 解析,它会返回一个空对象
如果我尝试类似 console.log(form.address) 的输出未定义但应该是一个我在表单中提交的值。
我的 http 服务器将路由到 /email,这是响应 /email 的函数。
我检查并知道 on 'data' 事件尚未过期,因为我的代码设置为通知我“data”事件并且我可以看到事件正在发生。在本地,这段代码工作正常,我可以读取提交的数据,但在开发服务器上它不起作用。
我知道人们会说我应该使用 connect 或 express 但假设这不是一个选项,我怎样才能让节点正确处理这些数据?提交表单的jquery或多或少是标准的。非常感谢!
编辑:
抱歉,我认为问题会得到解决,因为我立即注意到发布的字符串不是 JSON。这是我用来发送帖子的代码。
$(document).ready(function() {
$("#email").submit(function(event) {
event.preventDefault();
var data = $(this).serializeArray();
$.ajax({
type: 'POST',
dataType: 'json',
url: '/email',
data: JSON.stringify(data),
success: function(msg) {
$("#aviso").html(msg);
}
});
});
});
这是数据变量保存的字符串:
[
{
"name": "address",
"value": "foo@bar.com"
},
{
"name": "honeypot",
"value": "irobot"
}
]
这是根据 jsonlint 的有效 JSON。但是当它到达服务器时仍然是同样的错误。节点处理“数据”事件,在我尝试解析字符串之前一切都很好,它会导致错误未定义:1 意外 o。