1

Node-Soapライブラリを使用して、node.js サーバーから外部 Web サービスを呼び出しています。コードは以下のとおりです。

var http = require("http");
var soap = require("soap");
var url = 'http://www.w3schools.com/webservices/tempconvert.asmx?wsdl';
var args = {Celsius: '40'};

http.createServer(function(request,response) {
  response.writeHead(200,{"Content-Type":"text/html"});
  response.write("<h1>Hello, Web!</h1>");
  soap.createClient(url, function(err, client) { 
    client.CelsiusToFahrenheit(args, function(err, result) {
      console.log(result); //This works
      response.write(result); //This doesn't print
    });
  });
  response.end();
}).listen(8888);

Web サービスを正常に呼び出すことができ、応答を得ることができます。問題は、resultconsole.log() を使用して出力すると、次のように出力されることです。

{ CelsiusToFahrenheitResult: '104' }

しかし、response.write 経由で送信すると、出力を取得できず、空の値が返されます。与えresult.toString()てみJSON.stringify(result)ましたが、まだ空白になっています。

手伝ってくれませんか?console.log を使用してデータを出力できるのに、response.write を使用できないのはなぜですか?

4

1 に答える 1

2

SOAP 要求が完了した後にのみ応答を終了する必要があります (SOAP クライアントを作成した直後に終了しますが、SOAP 要求の結果が利用可能になるまでに時間がかかる場合があります)。

http.createServer(function(request,response) {
  response.writeHead(200,{"Content-Type":"text/html"});
  response.write("<h1>Hello, Web!</h1>");
  soap.createClient(url, function(err, client) { 
    client.CelsiusToFahrenheit(args, function(err, result) {
      ...convert result to string-form, perhaps with JSON.stringify()...
      response.end(result);
    });
  });
}).listen(8888);

いくつかの注意事項:

  • response.end()データも取得できるため、(この場合)別のresponse.write();を使用する必要はありません。
  • end()Bufferdata 引数が文字列または;であることを期待します。
于 2013-04-22T11:06:01.453 に答える