1

ノードのポストメソッドを次のように公開しています

function onRequest(request, response) {
    var postData='';
    var pathname = url.parse(request.url).pathname;
    console.log("Request for " + pathname + " received.");

    if(request.method==="POST"){
        request.setEncoding("utf8");
        console.log('in post');
        request.addListener("data", function(postDataChunk) {
            postData += postDataChunk;
            console.log("Receiving POST data chunk '"+postDataChunk + "'.");
        });
        request.addListener("end", function() {
           console.log("Received POST data ");
           console.log(postData);
        });    
    }
}

コンソール ログは xml string になると思います。

<ContainerItem>
          <Id>Id</Id>
          <Name>Name</Name>
          <Description>Description</Description>
          <Type>Type</Type>
  </ContainerItem>

しかし、次のような出力が得られます。

text=%3CContainerItem%3E%0D%0A++++++++++%3CId%3EId%3C%2FId%3E%0D%0A++++++++++%3CName%3EName%3C%2FName%3E%0D%0A++++++++++%3CDescription%3EDescription%3C%2FDescription%3E%0D%0A++++++++++%3CType%3EType%3C%2FType%3E%0D%0A%3C%2FContainerItem%3E

これを XML 文字列として取得するにはどうすればよいですか? xml2js ライブラリを使用して解析できるようにします。

4

1 に答える 1

0

データはクエリ文字列形式で受信され、受信時に URL エンコードされているため、デコードする必要があります。この目的のために、ネイティブクエリ文字列モジュールを使用できます。

var qs = require('querystring');
var str = 'text=%3CContainerItem%3E%0D%0A++++++++++%3CId%3EId%3C%2FId%3E%0D%0A++++++++++%3CName%3EName%3C%2FName%3E%0D%0A++++++++++%3CDescription%3EDescription%3C%2FDescription%3E%0D%0A++++++++++%3CType%3EType%3C%2FType%3E%0D%0A%3C%2FContainerItem%3E';

var xml = qs.parse(str);
// data.text

解析されたクエリ文字列がオブジェクトになったのでdata.text、XML パーサーに渡すことができます。

var parseString = require('xml2js').parseString;
parseString(xml, function(err, result) {
  // parsed XML is in result
});
于 2013-10-03T13:25:51.653 に答える