[Solved] Get HTTP error status code

How do I get HTTP status code in case of 401?

Here is my code:

var result = HTTP.call("POST", 'http://example.com', { data:{"key": "value"}, headers:{'Content-Type' : 'application/json'}});
console.dir(result );

In case of error i get this exception:

I20200326-22:23:49.080(5)? 'Error: failed [401] {"data":null,"description":"Invalid Password!","status":"ERROR","statusCode":4012}\n' +
I20200326-22:23:49.080(5)?   '    at Object.exports.makeErrorByStatus (packages/http.js:176:10)\n' +
I20200326-22:23:49.080(5)?   '    at Request._callback (packages/http.js:140:24)\n' +
I20200326-22:23:49.080(5)?   '    at Request.self.callback (/home/my-server/.meteor/packages/http/.1.4.2.8kf6jd.1nsqm++os+web.browser+web.browser.legacy+web.cordova/npm/node_modules/request/request.js:185:22)\n' +
I20200326-22:23:49.080(5)?   '    at Request.emit (events.js:311:20)\n' +
I20200326-22:23:49.081(5)?   '    at Request.EventEmitter.emit (domain.js:482:12)\n' +
I20200326-22:23:49.081(5)?   '    at Request.<anonymous> (/home/my-server/.meteor/packages/http/.1.4.2.8kf6jd.1nsqm++os+web.browser+web.browser.legacy+web.cordova/npm/node_modules/request/request.js:1161:10)\n' +
I20200326-22:23:49.081(5)?   '    at Request.emit (events.js:311:20)\n' +
I20200326-22:23:49.082(5)?   '    at Request.EventEmitter.emit (domain.js:482:12)\n' +
I20200326-22:23:49.082(5)?   '    at IncomingMessage.<anonymous> (/home/my-server/.meteor/packages/http/.1.4.2.8kf6jd.1nsqm++os+web.browser+web.browser.legacy+web.cordova/npm/node_modules/request/request.js:1083:12)\n' +
I20200326-22:23:49.082(5)?   '    at Object.onceWrapper (events.js:417:28)\n' +
I20200326-22:23:49.082(5)?   '    at IncomingMessage.emit (events.js:323:22)\n' +
I20200326-22:23:49.082(5)?   '    at IncomingMessage.EventEmitter.emit (domain.js:482:12)\n' +
I20200326-22:23:49.082(5)?   '    at endReadableNT (_stream_readable.js:1204:12)\n' +
I20200326-22:23:49.083(5)?   '    at processTicksAndRejections (internal/process/task_queues.js:84:21)'

How can I get error status code from this?

Wrap it to try{}catch(){} block or use asynchronous version with callback.

try {
  var result = HTTP.call("POST", 'http://example.com', { data:{"key": "value"}, headers:{'Content-Type' : 'application/json'}});
  console.dir(result);
} catch (error) {
  console.log(error);
}

@dr.dimitru This is what I get in catch too. Its the same for asynchronous too

What exactly are you trying to accomplish? What’s your goal?

In case of Error Code 401, I want to apply some logic on the response I received from API. I want to use that response data.

Try this:

const processStatusCode = (code) => {
  if (code === 401) {
    // your logic here 
  }
};

try {
  const result = HTTP.call("POST", 'http://example.com', { data:{"key": "value"}, headers:{'Content-Type' : 'application/json'}});
  processStatusCode(result.statusCode);
} catch (error) {
  processStatusCode(error.response.statusCode);
}
1 Like

Its the same. I also want to take some decisions on the response data, not just the error code

Well, update and adapt the code I’ve posted to meet your needs.

But its not working bro. I am getting the same error.

Exception or error?
Exception or error?

Exception:

'Error: failed [401] {"data":null,"description":"Invalid Password!","status":"ERROR","statusCode":4012}\n' +

FYI, error.statusCode is undefined in catch

  1. Is it thrown even being inside try…catch… block?
  2. And even if callback is passed?
  3. On server?

What if you console.log(error)?

Ok here is the complete scenario:

Code:

try {
  
    var result = HTTP.call("POST", srcUrl, { data:postFields, headers:headersData });

    console.log('-- In Try --');
    console.dir(result);
}
catch (error) {

    console.log('-- In Catch --');
    console.log(error);
    console.log(error.statusCode);
}

Result:

I20200327-02:46:56.570(5)? -- In Catch --
I20200327-02:46:56.572(5)? Error: failed [401] {"data":null,"description":"Invalid Password!","status":"ERROR","statusCode":4012}
I20200327-02:46:56.573(5)?     at Object.exports.makeErrorByStatus (packages/http.js:176:10)
I20200327-02:46:56.573(5)?     at Request._callback (packages/http.js:140:24)
I20200327-02:46:56.573(5)?     at Request.self.callback (/home/my-server/.meteor/packages/http/.1.4.2.8kf6jd.1nsqm++os+web.browser+web.browser.legacy+web.cordova/npm/node_modules/request/request.js:185:22)
I20200327-02:46:56.573(5)?     at Request.emit (events.js:311:20)
I20200327-02:46:56.573(5)?     at Request.EventEmitter.emit (domain.js:482:12)
I20200327-02:46:56.573(5)?     at Request.<anonymous> (/home/my-server/.meteor/packages/http/.1.4.2.8kf6jd.1nsqm++os+web.browser+web.browser.legacy+web.cordova/npm/node_modules/request/request.js:1161:10)
I20200327-02:46:56.574(5)?     at Request.emit (events.js:311:20)
I20200327-02:46:56.574(5)?     at Request.EventEmitter.emit (domain.js:482:12)
I20200327-02:46:56.574(5)?     at IncomingMessage.<anonymous> (/home/my-server/.meteor/packages/http/.1.4.2.8kf6jd.1nsqm++os+web.browser+web.browser.legacy+web.cordova/npm/node_modules/request/request.js:1083:12)
I20200327-02:46:56.574(5)?     at Object.onceWrapper (events.js:417:28)
I20200327-02:46:56.574(5)?     at IncomingMessage.emit (events.js:323:22)
I20200327-02:46:56.574(5)?     at IncomingMessage.EventEmitter.emit (domain.js:482:12)
I20200327-02:46:56.574(5)?     at endReadableNT (_stream_readable.js:1204:12)
I20200327-02:46:56.574(5)?     at processTicksAndRejections (internal/process/task_queues.js:84:21) {
I20200327-02:46:56.575(5)?   response: {
I20200327-02:46:56.575(5)?     statusCode: 401,
I20200327-02:46:56.575(5)?     content: '{"data":null,"description":"Invalid Password!","status":"ERROR","statusCode":4012}',
I20200327-02:46:56.575(5)?     headers: {
I20200327-02:46:56.575(5)?       vary: 'Origin, Access-Control-Request-Method, Access-Control-Request-Headers, Origin, Access-Control-Request-Method, Access-Control-Request-Headers',
I20200327-02:46:56.575(5)?       'x-content-type-options': 'nosniff',
I20200327-02:46:56.575(5)?       'x-xss-protection': '1; mode=block',
I20200327-02:46:56.575(5)?       'cache-control': 'no-cache, no-store, max-age=0, must-revalidate',
I20200327-02:46:56.576(5)?       pragma: 'no-cache',
I20200327-02:46:56.576(5)?       expires: '0',
I20200327-02:46:56.576(5)?       'x-frame-options': 'DENY',
I20200327-02:46:56.576(5)?       'content-type': 'application/json',
I20200327-02:46:56.576(5)?       'transfer-encoding': 'chunked',
I20200327-02:46:56.576(5)?       date: 'Thu, 26 Mar 2020 21:46:56 GMT',
I20200327-02:46:56.576(5)?       connection: 'close'
I20200327-02:46:56.576(5)?     },
I20200327-02:46:56.576(5)?     data: {
I20200327-02:46:56.577(5)?       data: null,
I20200327-02:46:56.577(5)?       description: 'Invalid Password!',
I20200327-02:46:56.577(5)?       status: 'ERROR',
I20200327-02:46:56.577(5)?       statusCode: 4012
I20200327-02:46:56.577(5)?     }
I20200327-02:46:56.577(5)?   }
I20200327-02:46:56.577(5)? }
I20200327-02:46:56.577(5)? undefined

So it isn’t throwing exception, it’s caught error.

Updated:

const processStatusCode = (code) => {
  if (code === 401) {
    // your logic here 
  }
};

try {
  const result = HTTP.call("POST", 'http://example.com', { data:{"key": "value"}, headers:{'Content-Type' : 'application/json'}});
  processStatusCode(result.statusCode);
} catch (error) {
  processStatusCode(error.response.statusCode);
}
3 Likes

Nice. It worked like a charm. Thanks for the help bro,

1 Like