Diego
Diego

Reputation: 503

Obtain data from a GET in superagent function

I'm trying to do something like this:

var countElemnts = function() {
            superagent
              .get('/someOtherUrl')
              .query({
                type: value.type
              })
              .end(function(err, res) {
                console.log(JSON.stringify(res.body));
                if (res.ok) {
                  reply(JSON.stringify(res.body));
                } else {
                  console.log(err);
                }
              })
          };
          superagent
            .post('/someUrl')
            .type('json')
            .send({
              name: 'value.update',
              data: {
                id: request.params.id,
                type: value.type,
                count: countElemnts()
              }
            })
            .end(function() {
              reply({
                message: 'ok'
              });
            });

In data option of the send function I'm trying to call a function to obtain some value.

What I want is to get the value that comes in the body of a reply, ie the res.body. Upon console.log get this [{ "count ": 3 } ], but if I do a console.log of res.body.count tells me undefined, what could I do to get the value 3.

Thanks.

Upvotes: 1

Views: 9120

Answers (1)

victorkt
victorkt

Reputation: 14572

Since the return doesn't have the extra space in "count " (as mentioned in the comments) the problem was that you were trying to access the count attribute of the array and not the object (first element of the array), so to access it you should do it like:

res.body[0].count

As for the problem of not being able to get the count in your POST, the problem is that countElemnts uses an asynchronous function. The end method of superagent takes a function as parameter and it is only called when it receives a response. By that time, your function had already returned (with undefined, since you didn't return anything).

You should first make the GET call and then send it to a function that will handle the POST. For example:

superagent
.get('/someOtherUrl')
.query({
  type: value.type
})
.end(function(err, res) {
  if (err) {
    console.log(err);
  } else {
    console.log(JSON.stringify(res.body));
    sendCount(res.body[0].count)
  }
});

function sendCount(count) {
  superagent
  .post('/someUrl')
  .type('json')
  .send({
    name: 'value.update',
    data: {
      //id: request.params.id,  // not sure where you are getting these values from,
      //type: value.type,       // but you should adapt it to your code
      count: count
    }
  })
  .end(function() {
    reply({
      message: 'ok'
    });
  });
}

Upvotes: 4

Related Questions