Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs Node.js-意外的重复post rest调用_Angularjs_Node.js_Rest_Sockets_Koa - Fatal编程技术网

Angularjs Node.js-意外的重复post rest调用

Angularjs Node.js-意外的重复post rest调用,angularjs,node.js,rest,sockets,koa,Angularjs,Node.js,Rest,Sockets,Koa,技术堆栈: Angular 1.4应用程序客户端,发布到: 节点5.1应用程序服务器(基于koa/es6的框架),发布到: 节点5.1微服务服务器(基于koa/es6的框架),它调用: Oracle 11.x存储过程 我们遇到了一个奇怪的问题,过去两天一直困扰着我们的开发团队。我们注意到,启动Oracle存储过程的microservice POST rest调用在第一次POST发生大约一分钟后(这是一个长时间运行的存储过程),会经历第二次相同的POST rest调用(但出乎意料)。我们将此重

技术堆栈:

  • Angular 1.4应用程序客户端,发布到:
  • 节点5.1应用程序服务器(基于koa/es6的框架),发布到:
  • 节点5.1微服务服务器(基于koa/es6的框架),它调用:
  • Oracle 11.x存储过程
我们遇到了一个奇怪的问题,过去两天一直困扰着我们的开发团队。我们注意到,启动Oracle存储过程的microservice POST rest调用在第一次POST发生大约一分钟后(这是一个长时间运行的存储过程),会经历第二次相同的POST rest调用(但出乎意料)。我们将此重复呼叫回溯到遇到相同重复POST问题的应用程序服务器。起初,我们认为罪魁祸首是Angular客户端中的错误逻辑,但是控制台日志记录和网络分析表明,客户端只向其后端发起一个POST。应用服务器上的第二篇帖子似乎是自启动的

以下是应用服务器上的路由处理程序代码,用于处理来自Angular客户端的POST,并随后将POST发送到microservice REST端点(控制台日志将被吐出两次):

我还可以补充一点,每当发生重复呼叫时,应用程序服务器都会显示以下错误(不清楚是否相关):

错误:套接字挂起     在createHangUpError(_http_client.js:209:15)     在Socket.socketOnEnd(_http_client.js:294:23)     在emitNone(events.js:72:20)     在Socket.emit(events.js:166:7)     在endReadableNT(_stream_readable.js:905:12)     在下一次使用2args进行回调时(node.js:455:9)     在进程中调用(node.js:369:17)


我们目前的工作原理是,如果第一个库没有收到响应,那么混合库(可能是koa请求或请求)会启动第二个帖子。然而,在何处执行此操作以及如何关闭或扩展超时参数是一个谜。在这一点上,如果有人有类似的事情发生,并有任何建议,我将不胜感激。谢谢。

完成这个过程通常需要多长时间?Angular应用程序是否一直在等待帖子完成?用户是否需要知道该过程是否成功完成或出错?Dan-SP过程可能需要10秒到几分钟的时间,具体取决于用户在angular应用程序中的选择。angular中的异步侦听器应该等待进程完成并向用户报告成功或失败。什么是“异步”侦听器?您是在使用WebSockets进行轮询,还是只是一个请求并等待?@Gatmando,现在也有同样的问题,试图从用户选择的日期获取excel文件,大约等待1分钟后,请求再次被调用。。。你是否也使用Express?JS?“F?BiasANtos我们使用的是膝关节炎(V1)框架,不表达。我们从来没有找到一个令人满意的方法来解决这个问题,而是在接收帖子的REST端点上写了一点hack。在受影响的路由处理程序上,我们指示它忽略第一个进程仍在运行时发生的后续相同帖子。它不漂亮,但很管用。我们根本没有时间或人力去进一步探索。这个过程通常需要多长时间才能完成?Angular应用程序是否一直在等待帖子完成?用户是否需要知道该过程是否成功完成或出错?Dan-SP过程可能需要10秒到几分钟的时间,具体取决于用户在angular应用程序中的选择。angular中的异步侦听器应该等待进程完成并向用户报告成功或失败。什么是“异步”侦听器?您是在使用WebSockets进行轮询,还是只是一个请求并等待?@Gatmando,现在也有同样的问题,试图从用户选择的日期获取excel文件,大约等待1分钟后,请求再次被调用。。。你是否也使用Express?JS?“F?BiasANtos我们使用的是膝关节炎(V1)框架,不表达。我们从来没有找到一个令人满意的方法来解决这个问题,而是在接收帖子的REST端点上写了一点hack。在受影响的路由处理程序上,我们指示它忽略第一个进程仍在运行时发生的后续相同帖子。它不漂亮,但很管用。我们根本没有时间或人力进一步探索。
module.exports.quarantineActions = function*(){
    const opts = {
        method: 'POST',
        uri: transactionEndpoint+'/rest/quarantine-actions',
        json:true,
        body:this.request.body
    };

    console.log('POST to microservice initiated')
    const resp = yield request(opts);
    console.log('POST to microservice finsihed')

    this.status = resp.statusCode;
    this.body = resp.body;
};