Giter Club home page Giter Club logo

Comments (13)

JustinBeckwith avatar JustinBeckwith commented on May 24, 2024

Greetings! We can take a look at this in a bit, but for now, have you considered using teeny-request?
https://github.com/googleapis/teeny-request/

It was written to be mostly API compatible with request, but on top of node-fetch :)

from gaxios.

drmrbrewer avatar drmrbrewer commented on May 24, 2024

That looks interesting! However I'd prefer a library that does async/await out of the box (request doesn't, but I use a wrapper... bit clunky though).

Would also be useful to have your input on the following: https://stackoverflow.com/q/60532289/4070848

Perhaps I'm being too optimistic to hope for something that does everything that request does (only better)!

Thanks!

from gaxios.

drmrbrewer avatar drmrbrewer commented on May 24, 2024

@JustinBeckwith sure you're busy but would be great to have even some brief response on this one. Would be useful to all I'm sure. Thanks!

from gaxios.

JustinBeckwith avatar JustinBeckwith commented on May 24, 2024

👋 thanks for the bump

In the latter I'm used to specifying gzip: true in my request options, to ensure compression is used in the response (if available). This does not appear to be available in gaxios so I'm wondering if it is effectively enabled by default?

Yes! We're using node-fetch under the hood, so that option is enabled by default.

Not that I'd ever want to, but is it possible in gaxios to disable compression?

As of now I don't think you can 😆 We could certainly add this option if it was a big deal (easy enough). If we chose to support it, I would probably use the decompress flag documented in axios as the interface.

And it seems to me that the following drop-in replacements can also be made when transitioning from request to gaxios... please correct me if I'm wrong!

All of those were correct

What about an equivalent for auth: { bearer: bearerToken }? See here.

At the end of the day, that's just a header right? So you should be able to set:

gaxios.request({
  url: '...',
  headers: {
    auth: 'bearer xxxxx'
  },
});

And an equivalent to resolveWithFullResponse? See here.

It does this by default! The response you get back from the promise is the full response. The body is in response.data.

Hope this helps!

from gaxios.

drmrbrewer avatar drmrbrewer commented on May 24, 2024

Super helpful, thanks!

from gaxios.

drmrbrewer avatar drmrbrewer commented on May 24, 2024

@JustinBeckwith having been migrating the auth parameter of my previous options for the request module, I have discovered that there is slightly more to it than just turning it into a header.

Perhaps there is justification for an additional auth parameter for gaxios, as a helper?

I note that axios has an auth parameter (see here) similar to what is offered by request (see here).

It appears that both request's and axios's implementation deals with auth.user and auth.pass sub-parameters. These are seemingly converted internally into the following header:

'Authorization': 'Basic ' + base64encodedData

where:

var base64encodedData = Buffer.from(auth.user + ':' + auth.pass).toString('base64');

see e.g. here.

In addition, request's implementation (but not axios's) deals with the auth.bearer sub-parameter, and likely turns it into the following header:

'Authorization': 'Bearer ' + auth.bearer

So having the auth parameter in gaxios would make life a bit easier, but it's not essential because you can make up your own headers without it. It would be a "nice to have".

from gaxios.

JustinBeckwith avatar JustinBeckwith commented on May 24, 2024

Makes sense. Just to set expectations, we're not likely to add this any time soon - but thank you for digging!

from gaxios.

drmrbrewer avatar drmrbrewer commented on May 24, 2024

Yep, no worries... I've already done the manual conversion into appropriate Authorisation headers so likely I wouldn't use an auth parameter in gaxios anytime soon anyway!

from gaxios.

drmrbrewer avatar drmrbrewer commented on May 24, 2024

@JustinBeckwith on the same topic of transitioning from request... can gaxios do something equivalent to what is possible with request as described here and here?

from gaxios.

JustinBeckwith avatar JustinBeckwith commented on May 24, 2024

Yes! I don't know if we documented this but:
https://github.com/googleapis/gaxios/blob/master/src/gaxios.ts#L52

from gaxios.

drmrbrewer avatar drmrbrewer commented on May 24, 2024

So what would the gaxios equivalent of request('http://google.com/').pipe(res) and req.pipe(request('http://google.com/')).pipe(res) be?

from gaxios.

drmrbrewer avatar drmrbrewer commented on May 24, 2024

@JustinBeckwith any hints on my question just above? I'll give the first one a go myself:

const { request } = require('gaxios');
(await request({ url: 'http://google.com/', responseType: 'stream' })).data.pipe(res);

What about the second one, i.e. the gaxios equivalent of:

req.pipe(request(url)).pipe(res);

This is used for example in this sort of context.

Or in the following context, to redirect a request (whether it be a POST or GET request) to a different domain and pipe the response back to the client that sent the request:

const url = 'https://my.new.url.com' + req.originalUrl;
req.pipe(request(url)).pipe(res);

from gaxios.

drmrbrewer avatar drmrbrewer commented on May 24, 2024

@JustinBeckwith sure you're busy, but would be great to know the answer to the above question on piping into and out of gaxios, as a replacement for the deprecated request module which does this really straightforwardly. Would be useful to all I'm sure. Thanks!

from gaxios.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.