节点 - 在promise catch块上抛出SOAP错误

时间:2017-02-02 21:44:02

标签: node.js soap promise throw pg-promise

我正在使用 SOAP 库在NodeJ S(v6.9.4)中开发 SOAP服务器。我必须从Postgres数据库请求一些数据。我选择使用 pg-promise lib。

SAOP服务的实施方式如下:

TestConnection: function (args, cb, headers, req) {
db.any("select * from users where active=$1", [true])
  .then(function (data) {
    return {};
  })
  .catch(function (error) {
    throw {
      Fault: {
        faultcode: faultCode,
        faultstring: faultString,
        detail: {
          "ns:FaultInformation": {
            "ns:FaultCode": detailedFaultCode,
            "ns:FaultText": detailedFaultText
          }
        },
        statusCode: 500
      }
    };
  });
}

如果在数据库连接/请求期间出错,我需要返回SOAP Fault。在SOAP lib上,您可以通过throwing a new Fault object执行此操作。

在这个例子中,我想把它放在catch块中。我知道这不是正确的方法,我正面临这个问题:

  

UnhandledPromiseRejectionWarning:未处理的承诺拒绝   (拒绝id:3):[object Object]

如何在主服务功能中抛出 SOAP Fault异常。我尝试了setTimeout解决方案没有成功。承诺是PG查询的好方法吗?

1 个答案:

答案 0 :(得分:0)

我通过使用soap lib提供的 soap回调函数(cb)自行找到了解决方案。以下代码应在Async服务实现下返回Soap Fault异常:

TestConnection: function (args, cb, headers, req) {
db.any("select * from users where active=$1", [true])
  .then(function (data) {
    cb({});
  })
  .catch(function (error) {
    cb({
      Fault: {
        faultcode: faultCode,
        faultstring: faultString,
        detail: {
          "ns:FaultInformation": {
            "ns:FaultCode": detailedFaultCode,
            "ns:FaultText": detailedFaultText
          }
        },
        statusCode: 500
      }
    });
  });
 }