super-request icon indicating copy to clipboard operation
super-request copied to clipboard

Chaining requests passing arguments between request not possible

Open mauron85 opened this issue 11 years ago • 2 comments

Passing argument from one request response to another request is currently not possible

Expected behavior is to pass token from first response to next post request: Actual behavior is token is undefined.

var token;
request
    .post('/token')
    .auth({user: user.username + '#' + user.company, pass: user.password})
    .json(true)
    .end(function(err, res) {
        if (err) {
            return done(err);
        }
        token = res.body.access_token;
    })
    .post('/users')
    .headers({'Authorization': 'Bearer ' + token})
    .json(users)
    .end(function(err, res) {
        done();
    });

The current workaround is to use then:

request
    .post('/token')
    .auth({user: user.username + '#' + user.company, pass: user.password})
    .json(true)
    .end(function(err, res) {
        if (err) {
            return done(err);
        }
        token = res.body.access_token;
    }).then(function () {
        request
            .post('/users')
            .headers({'Authorization': 'Bearer ' + token})
            .json(users)
            .end(function(err, res) {
                done();
            });
    });

mauron85 avatar Apr 03 '14 17:04 mauron85

This is still an issue. I was trying the same exact thing.

JemiloII avatar Jul 07 '15 20:07 JemiloII

If you use ES6 you can use a Proxy (I actually haven't tested it with headers, but should work):

"use strict";
class Header {
  get Authorization() {
    return this._auth;
  }
  set Authorization(value) {
    this._auth = value;
  }
}
const hd = new Header();

request
    .post('/token')
    .auth({user: user.username + '#' + user.company, pass: user.password})
    .json(true)
    .end(function(err, res) {
        if (err) {
            return done(err);
        }
        hd.Authorization = 'Bearer ' + res.body.access_token;
    })
    .post('/users')
    .headers(hd)
    .json(users)
    .end(function(err, res) {
        done();
    });

dbellavista avatar Mar 15 '16 11:03 dbellavista