在RHC

时间:2017-12-07 07:24:26

标签: angularjs node.js openshift

我们在Openshift RHC v2上运行Node JS-Express应用程序,每当用户请求OTP时,都会向第三方SMS网关服务器调用api。为此,我们添加了一个简单的$ http调用,它将通过消息触发上述号码的短信。

请求看起来像这样:

$http.get("http://example.com/?user=userid:password&number=9876543210&message='Hi your OTP is 18276'")
    .success(function(error, response){
        if (!error && response.statusCode == 200) {
              console.log('STATUS: ' + response.statusCode)
              console.log('HEADERS: ' + JSON.stringify(response.headers));
        } else {
              console.log('STATUS : '+ error.statusCode);
              console.log(error);
        }

     });

一旦RHC服务器开始运行,它就会起作用。经过几天或有时几个小时后,我们发现此API始终未被调用。我们在请求之前和之后添加了控制台日志,但从未调用过API。令人非常惊讶和震惊的是它如何不执行这个请求(这个工作几天然后完全失效)。

这可能是什么问题?将重新分享我们所拥有的:

console.log("Generated OTP : " + otp);   // ... Where OTP is what we have generated... Console 1
var number = 9876543210;
var message = 'Hi your OTP is : '+otp;

console.log('Number : ' + number + ', Message : ' + message);  // ... Console 2
$http.get("http://example.com/?user=userid:password&number="+number+"&message="+message)
        .success(function(error, response){
            if (!error && response.statusCode == 200) {
                  console.log('STATUS: ' + response.statusCode) ... Console 3
                  console.log('HEADERS: ' + JSON.stringify(response.headers));  // ... Console 4
            } else {
                  console.log('STATUS : '+ error.statusCode);   // ... Console 5
                  console.log(error);   // ... Console 6
            }

         });

  console.log("callback - Post - /sellers/phone/:number/:email"); // ...Console 7
  res.json({"otp":otp});

当它关闭时,可以看到控制台1,2和7,但不能看到3,4或5和6。

我们可以在Openshift或Node应用程序上调试吗?

如果我使用rhc app-restart <app>重新启动服务器,则会看到其他控制台,我们会收到短信/消息。

请帮忙。如需更多信息,请告知我们。 谢谢。

编辑:我也尝试过如下使用请求:

request(url, function (error, response, body) {
        if (!error && response.statusCode == 200) {
               console.log('STATUS: ' + response.statusCode);
               console.log('HEADERS: ' + JSON.stringify(response.headers));
        } else {
               console.log('STATUS : ' + error.statusCode);
               console.log(error);
        }
  });

1 个答案:

答案 0 :(得分:0)

自AngularJS v1.6起,.success()上的.error()promises方法被删除。

而是使用.then()方法。 成功错误标题的所有数据都将移至.then(response) 响应数据。

<强>所以:

response.config, // Contains an object of configurations, like `Method`, `params`, `URL`
response.data, // Contains the data the request returned
response.status,  // Contains the status code, Eg 200 which is success
response.statusText, // Text of the status, Eg. Ok on success or Error on error

因此,请检查$http方法是否成功:

$http.get("http://example.com/?user=userid:password&number="+number+"&message="+message)
// Use .then instead of .success
.then(function (response) {
    if(response.status === 200) { 

        // Successfull 

    } else { 

        // Error occurred 

    }
});

只是想知道为什么要删除它们。看看这个主题:

Why are angular $http success/error methods deprecated? Removed from v1.6?