如何重构和编写我的函数以删除条件检查?

时间:2016-12-30 05:41:01

标签: javascript functional-programming composition

在我的应用程序中,我必须接受某些用户参数,如limitquery,并逐步构建一个restful api端点。

此代码有效:

const query = (obj) => {
  let starter = 'query='
  let queryToString = JSON.stringify(obj)
  return `${starter}${queryToString}`
}

const params = (str) => `${str}`

const endpoint = (base, params, query) => {
  if(!params && !query) return `${base}`
  if(!params) return `${base}${query}`
  return `${base}?${params}&${query}`
}

当我调用endpoint函数时,我得到了我想要的输出:

"api.content.io?limit=5&order=desc&query={\"field\":\"title\",\"include\":\"brands\"}"

问题是我必须考虑多个场景

一个。

中没有传递参数

中没有传递任何查询

℃。

中仅传递参数或查询

d。其他查询参数和其他参数将在程序的稍后时间附加

我正在寻找的是一种构图风格的功能,可能如下所示:

const apiEndpoint = endpoint(params(query(value))))

...然后这些单独的功能神奇地处理连接不同的输出 url-编码字符串处理空值给我一个干净有效的输出。

正如您在上面所看到的,我尝试将代码拆分为具有单一职责的多个功能。但无法弄清楚如何撰写它们。预期的输出是

api.contentstack.io?field=name&lte=price&query={limit: 5, order: 'desc')}

或者如果没有传递参数:

api.contentstack.io?query={limit: 5, order: 'desc')}

否则如果未传递查询,则:

api.contentstack.io?field=name&lte=price

依旧......

请帮助我理解如何重构和编写我的函数,以便我可以删除endpoint函数中的条件检查。

0 个答案:

没有答案