mercredi 27 mars 2019

Best way to have a module with a module scoped variable

I am writing a client to talk to a server API in JavaScript. I have an OOP background but am trying to embrace modern EcmaScript.

So I started with this:

customerApi.js:

const baseUrl = "http://myapi";
export const getCustomers = () => { /* get customer code */ }
export const addCustomer = cust => {}
export const deleteCustomer = id => {}

All the functions use baseUrl.

Now I want to refactor so that the code that uses customerApi.js sets/passes in the baseUrl, and the only ways I have come up with are -

make it a class:

export default class customerApi {
  constructor(baseUrl) {
   this._baseUrl  baseUrl;
  }
}

Pass it into every method:

export const getCustomers = (baseUrl) => { /* get customer code */ }
export const addCustomer = (baseUrl,cust) => {}
export const deleteCustomer = (baseUrl,id) => {}

Wrap in a function:

const moduleFn = baseUrl => (
  return {
    getCustomers: () => { /* get customer code */ }
    addCustomer: (cust) => {}
    deleteCustomer: (id) => {}
  }
)
export default moduleFn;

What would be the preferred pattern to implement this?

Aucun commentaire:

Enregistrer un commentaire