如何从node.js自定义服务器向客户端发送响应

时间:2013-04-22 10:51:42

标签: javascript node.js

我正在使用Node-Soap库从我的node.js服务器调用外部web-serivce,代码如下所示:

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服务并能够获得响应。问题是当我使用console.log()打印result时,我能够得到输出:

{ CelsiusToFahrenheitResult: '104' }

但是当我通过response.write发送它时,我无法获得任何输出,我将获得空值。我尝试过result.toString()JSON.stringify(result),但我仍然空白。

你能帮帮我吗?为什么我能够使用console.log打印数据但不能使用response.write?

1 个答案:

答案 0 :(得分:1)

只有在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;