Как сделать так, чтобы свойства и значения были прочитаны? - PullRequest
1 голос
/ 20 апреля 2020

Я работаю с graphql.

Мой бэкэнд окончательно установлен, и теперь я работаю над отправкой запросов с моего веб-интерфейса на мой бэкэнд.

Представьте себе этот запрос:

{
    login(Email:"MyEmail", Password:"MyCoolPasswordHello")
  {token
  refreshToken}
}

Я думал, что мог бы попытаться сделать мои запросы повторяемыми во внешнем интерфейсе, поэтому я создал файл запросов и сделал это:

export enum QueryNames {
  login = 'login',
}

export const getQuery = (query: QueryNames, params: any): any => {
  const queries = {
    login: `{login(${params}){token refreshToken}}`,
  }[query];

  if (!queries) return {};

  return queries;
};

export const query = (queryName: QueryNames, params: any) => getQuery(queryName, params);

Он вызывается так:

console.log(getQuery(QueryNames.login, { Email: "Hello", Password: "HelloPassword" }));

Результат:

{login ([объект объекта]) {токен refreshToken}}

Я могу изменить свой логин на

export const getQuery = (query: QueryNames, params: any): any => {
  const queries = {
    login: `{login(Emai:${params.Email} Password: ${params.Password}){token refreshToken}}`,
  }[query];

  if (!queries) return {};

  return queries;
};

И тогда я получу желаемый результат.

Есть ли способ сделать так, чтобы имена и значения моих свойств читались вместо того, чтобы я явно устанавливал Email: и Password:?

1 Ответ

1 голос
/ 20 апреля 2020

заняло у меня некоторое время, но решил это так:

export const makeArray = (obj) => Array.from(Object.keys(obj), k => [`${k}`, obj[k]]);

и использовал это так:

export const getQuery = (query: QueryNames, params: any): any => {
  const props = makeArray(params);

  // @ts-ignore
  // eslint-disable-next-line array-callback-return
  const funcParams = props.map(current => `${current[0]} : ${current[1]} `);

  const queries = {
    login: `mutation {login(${funcParams}){token refreshToken}}`,
  }[query];

  if (!queries) return {};

  return queries;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...