【问题标题】:Nodejs error due to long running SQL Procedure, POST from Angular由于长时间运行的 SQL 过程,来自 Angular 的 POST 导致的 Nodejs 错误
【发布时间】:2018-06-21 22:51:41
【问题描述】:

在我的网站上,我目前使用 Angular / NodeJs/ 和一个 SQL 数据库。在该站点上,我从站点向 NodeJs 到数据库进行了很多调用,并且工作正常。但是,当我运行一个需要很长时间来处理的存储过程时,我会在控制台中返回以下内容:

POST /job_bbb - - ms - -

根据我在 Google 上看到的情况,这是因为没有回复。

关于如何解决这个问题的任何想法?任何帮助将不胜感激。

对我的服务的 Angular 调用:

this.teradataService.getBBB(this.id).subscribe(bbbresults => this.bbbresults = bbbresults,
        error => console.log('ERROR!'),
        () => {
 });

服务 HTTP POST:

    getBBB(id): Observable<[BBBResult]> {
  const url = 'http://localhost:3000/job_bbb';
  const data = ({
    id: id
  });
  return this._http.post(url, data)
  .pipe(
    map((res) => {
      console.log(res);
      return <[BBBResult]> res;
    })
  );
}

Nodejs

router.post('/job_bbb', function (req, res) {
var id = req.body.id;
      var sql = "CALL Stored Proecedure Here;";
      console.log(sql);
      return database.read(sql)
        .then((x) => {
          console.log(x)
          res.send(x);
        })
    });

【问题讨论】:

  • Node.js 中的 console.log 是否被打印出来?如果您从命令行(即不是从 Node)运行存储的 proc,执行需要多长时间?
  • console.log(sql) 会被打印,console.log(x) 不会。大约需要 5 分钟才能完成。同样的过程在过去按预期工作,但现在需要更长的时间,我收到了这个 POST 问题。
  • 如果需要 5 分钟才能完成,我并不惊讶它会超时...您的意思是 console.log(x) 没有打印,即使在 5 分钟之后?有什么办法可以加快执行速度吗?
  • 它永远不会返回,我相信我收到了 POST - - ms - - 因为由于超时,POST 永远不会得到响应。存储过程在数据库端正常工作,但在它完成响应通过 Nodejs 之前认为它已经超时。没有办法加快执行速度。我觉得必须有一种方法让它等待更长时间,但我对 Nodejs/Angular 非常缺乏经验。

标签: javascript node.js angular http


【解决方案1】:

您可以尝试增加服务器响应的服务器超时。 如果节点服务器是 Express:

 server.setTimeout(msecs);

或者可能更好:

router.post('/job_bbb', function (req, res) {
       req.setTimeout(msecs);
       ....
});

默认超时应为 2 分钟。

【讨论】:

    猜你喜欢
    • 2013-04-26
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    • 2015-12-11
    • 2011-07-30
    • 2015-02-22
    相关资源
    最近更新 更多