3

編集

リクエスト オブジェクトとレスポンス オブジェクトを並置しないでください。そうしないと物事が簡単になります。

特定の url ノードが応答する 2 つの入力を持つフォームからデータを POST しようとしています。もともと私はそれを送信するために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,

これは完全な文字列ではありませんでした。serializearray() はノードが読み取ることができる別の形式を作成する可能性があると思ったが、それは同じだったので、代わりに ajax ポスト要求を使用するように切り替えました。私のサーバー側のコードは基本的に次のとおりです。

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 が原因でエラーが発生し
ます。クエリ文字列で解析しようとすると、空のオブジェクトが返されます
。フォームで送信した値の。

私の http サーバーは /email にルーティングされ、これが /email に応答する機能です。

コードが「data」イベントを通知するように設定されており、イベントが発生していることを確認できるため、チェックしたところ、on「data」イベントの有効期限が切れていないことがわかりました。ローカルでは、このコードは正常に機能し、送信されたデータを読み取ることができますが、開発サーバーでは機能しません。

接続またはエクスプレスを使用する必要があると人々が言うことは知っていますが、それがオプションではなかったとしましょう。ノードでこのデータを正しく処理するにはどうすればよいでしょうか? フォームを送信する 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.

4

1 に答える 1

1

送信しているデータは有効な JSONではありません。これには、すべてのオブジェクト キーを二重引用符で囲む必要があります

于 2012-04-06T16:51:32.977 に答える