Problem:
So I know the answer should be obvious but for some reason i’m having trouble finding a clean way to do this.
In this example im using a wrapper library around a built in requests library (It handles default headers/auth things like that)
In my smaller client libraries im further wrapping this up by abstracting specific request calls to functions (These functions call the parent wrapper library).
Anyways occasionally to test invalid authorization I need to overwrite the “default” headers that get put into my wrapper library.
My wrapper library handles this like so (for example the GET
request):
public async get(
url: string,
headers: any = {}
):
And further down I check the headers like so:
if (Object.keys(headers).length === 0) {
//set headers here
and then further down I do the normal call. get(url, { headers: headers })
(Maybe there is a better way to handle this, but it works because I can pass along headers OR use the default ones if none are passed)
In my Client
code. I do something like:
public async getWidgets(headers?) {
let getResponse: APIResponse;
getResponse = await super.get(SOME_URL, headers ?? null );
return getResponse;
}
Essentially I am trying to call the parent GET
with either the default headers if NOTHING is sent OR use the headers that were passed along in the function parameters.
I could do an if/else but im sure there is a cleaner way using ternary maybe? Maybe do something like getWidget(headers = null)
and then do something like super.get(SOME_URL, headers ?? null)
problem is I need to make sure the parent uses the default “No headers” if no headers were sent here either. Im not sure if null
in a parameter is the same as “Nothing” if that makes sense?
Thanks
Solution:
I guess I’m not sure why you can’t do this?
public async getWidgets(headers?) {
let getResponse: APIResponse;
getResponse = await super.get(SOME_URL, headers ?? {} );
return getResponse;
}
If headers is specified, then it gets used, otherwise you pass in your empty object.
If this doesn’t work, let me know which case is not being handled so I can understand the scenario better