确保不发送完整的xml响应

时间:2014-07-31 14:20:27

标签: node.js adobe-indesign restify

我有一个小的restify api,它与sql server对话并返回xml。 xml响应可能非常大并且由Adobe InDesign使用。 Api调用在浏览器中工作,但是当从InDesign调用时,我得到不完整的xml响应。

InDesign使用名为ExtendScript的专有脚本语言,它使用套接字进行通信。在Streams中不确定是一种选择。

2 个答案:

答案 0 :(得分:0)

我有一个非常类似的问题,经过大量的游戏后,我在连接写入和读取之间添加了几秒暂停,这就解决了现在的问题。我不是这个修复的粉丝。谁有更好的主意?我怀疑随着文件变大,你将不得不开始增加超时。

var conn = new Socket;

if (conn.open (host + ":7000","UTF-8"))

{  conn.write("GET /report/" + ReportID  +" HTTP/1.0\n" +
   "Content-Type: application/xml; charset=UTF-8\n\n");

   $.sleep(2000);

   reply = conn.read (999999);

   conn.close();
}

答案 1 :(得分:0)

您确实需要使用回调和 - > net< - 库。

net library doc

var net = require('net');
var client = net.connect({port: 8124},
    function() { //'connect' listener
  console.log('connected to server!');
  client.write('world!\r\n');
});
client.on('data', function(data) {
  console.log(data.toString());
  client.end();
});
client.on('end', function() {
  console.log('disconnected from server');
});

我从官方文档中复制了该示例,因为您可以看到您确实需要对事件使用回调,在本例中为de“data”事件,当您获得完整响应时,您将继续发送您的回复。 / p>

您的XML不完整,因为您在Socket完成之前发送响应以接收数据。

记住javascript是非阻塞的,这可能会发生,这就是为什么你需要学习如何使用事件和回调。

请使用网络库。

希望它有所帮助。

PD:我很抱歉我的英语很差,但我试图提供帮助。