我正在使用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)
,但我仍然空白。
答案 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
;