Сопоставьте ключи параметров объекта запроса с пользовательскими ключами, прежде чем объект запроса попадет в контроллер - PullRequest
0 голосов
/ 10 января 2019

У меня есть приложение Loopback 4, ключи свойств объекта запроса snake_case, и они сопоставляются с именами столбцов нашей БД, которые StudlyCase. Допустим, я хочу, чтобы имена свойств приложения были camelCase. Таким образом, ключи данных пройдут следующий жизненный цикл:

Request Parameter (snake_case)
        ||
        \/
Model Property (camelCase)
        ||
        \/
MySQL Column (StudlyCase)

Loopback 4 заботится о сопоставлении между Свойством Модели и Столбцом MySQL. Он имеет декораторы, которые позволяют мне указывать имя столбца БД, связанное со свойством модели, используя те же ключи свойства, что и объект запроса, например:

@property({
  mysql: {
    columnName: 'FirstName',
  },
  type: 'string',
  required: true,
})
first_name: string;

Я ищу пакет Express или другой простой способ применить пользовательское сопоставление ключей в объектах запроса до того, как они достигнут контроллера, а не на уровне модели данных, как позволяют декораторы Loopback.

У Laravel именно то, что я ищу. Они называют это слоем Eloquent API Resource. Это просто массив отображений, например:

[
  'first_name' => 'firstName',
  'last_name' => 'lastName',
  ... more mappings ...
]

Но дело в том, что это сопоставление происходит еще до того, как контроллер получает объект запроса .

Как это можно сделать в Loopback 4 / Express / NodeJS?

UPDATE: Похоже, Loopback 4 оборачивает Express в API-интерфейсы Sequence его @loopback/rest пакета. Я опубликую еще одно обновление, как только у меня будет это полностью выяснено, а также ответ.

Что-то, что я забыл упомянуть, это то, что ключи свойств объекта Response также должны совпадать с ключами свойств объекта Request (snake_case в моем случае). Я выложу решение TypeScript / LB4.

1 Ответ

0 голосов
/ 10 января 2019

Если вы хотите преобразовать ключи параметров в camelcase - попробуйте ccqp express middleware.

...