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

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

 { CelsiusToFahrenheitResult: '104' } 

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

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

只有在您的SOAP请求完成后(您在创buildSOAP客户端后立即结束它,但在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参数是一个string或一个Buffer ;