当我的回调函数解析wsdl文件并给我回复时,我想显示html页面,其中我想显示列表视图,其中包含来自我的node.js请求处理程序的解析数据。这是我的代码,
soap.createClient(AW_URL, function(err, client) {
if (err) {
console.log(err.stack);
return;
}
else {
client.setSecurity(new soap.WSSecurity(auth.login, auth.key));
client.ListProviders(function(err, res) {
if (err) {
console.log(err.stack);
return;
}
else {
var pro = res.Providers[1];
console.log(pro);
}
});
}
});
//var body = html page
response.writeHead(200, {"Content-Type": "text/html"});
response.write(body);
response.end();
所以我不知道如何等待soap客户端回调函数来获取数据,因为 在数据来到我之前html进入前面。需要帮助。对我来说,任何建议都是很有帮助的。谢谢。
答案 0 :(得分:1)
node.js中的程序流程如下:
response.writeHead(200, { "Content-Type": "text/html" });
doSomethingAsync(function (err, res) {
response.write(res);
response.end();
});
因此,您无需立即致电end()
。您可以从任何回调中调用它,然后行为将按预期进行。
答案 1 :(得分:0)
您实际上没有指定要生成html的位置。所有client
方法都接受回调(您错误地将回调放入client.ListProviders
的args对象位置。
假设您希望client.ListProviders在您的响应被编写之前执行...
// where is `response` getting set?? it's not in your example
var response;
function callback() {
// do stuff here
response.writeHead(200, {"Content-Type": "text/html"});
response.write(body);
response.end();
}
soap.createClient(AW_URL, function(err, client) {
if (err) {
//errors
}
else {
client.ListProviders({x: 2, y: 4}, callback);
}
});
但是,我不确定问题是什么。想必你的肥皂电话会输出一些HTML?所以你可能想要更像这样的东西:
// where is `response` getting set?? it's not in your example
var response;
var headerHtml = '<h1>Hello World!</h1>';
var footerHtml = '<div>I like swords!</div>';
// create whatever goes above the soap call
response.writeHead(200, {"Content-Type": "text/html"});
response.write(headerHtml);
function callback(err, result) {
// do some stuff that create's html and call response.write();
finishPage();
}
function finishPage() {
response.end(footerHtml);
}
soap.createClient(AW_URL, function(err, client) {
if (err) {
//errors
}
else {
client.ListProviders({x: 2, y: 4}, callback);
}
});