Comments (13)
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.
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.
@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.
👋 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.
Super helpful, thanks!
from gaxios.
@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.
Makes sense. Just to set expectations, we're not likely to add this any time soon - but thank you for digging!
from gaxios.
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.
@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.
Yes! I don't know if we documented this but:
https://github.com/googleapis/gaxios/blob/master/src/gaxios.ts#L52
from gaxios.
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.
@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.
@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)
- Your .repo-metadata.json file has a problem 🤒
- Your .repo-metadata.json file has a problem 🤒
- Ensuring compliance with SNI Extension requirement on remote host HOT 3
- Support proxy option instead of HTTP_PROXY env variable HOT 4
- Get request with one-item array param, will send the value inside instead the the array HOT 1
- Feature request: optional error throwing HOT 2
- 📦 pack and install: "before all" hook: pack and install for "should run the sample" failed HOT 4
- can i please for more docs about comparison with axios HOT 1
- Incorrect GaxiosError message type when request responseType "arrayBuffer" HOT 2
- Uncaught ReferenceError: process is not defined HOT 1
- content-type parsing is performed even if a `text` response type is explicitly requested, causing an unmanageable error HOT 3
- timeout - seconds or milliseconds HOT 1
- feat!: Use Native `cause` in `GaxiosError`
- Using googleapis for direct CSV downloads does not return CSV
- Typo on README.md
- feat: Updated `timeout` Implementation and Documentation HOT 1
- feat: Add `client_secret` to `defaultErrorRedactor` HOT 2
- Warning: a recent release failed HOT 1
- Warning: a recent release failed HOT 1
- Warning: a recent release failed
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from gaxios.