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);

我能够成功调用网络服务并能够得到响应。问题是当我result使用 console.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()期望 data 参数是一个字符串或一个Buffer;
于 2013-04-22T11:06:01.453 回答