Создание перечисления Node.js в коде для сопоставления списка значений в базе данных - PullRequest
0 голосов
/ 21 мая 2019

У меня есть список допустимых значений, которые я храню в хранилище данных. Этот список насчитывает около 20 наименований и может вырасти до 100, а может и больше.

Мне кажется, есть множество причин, по которым имеет смысл хранить это в хранилище данных, а не просто хранить в коде. Я хочу иметь возможность вести список и его метаданные и делать его доступным для других служб, поэтому он выглядит как хранилище данных микросервисов.

Но в коде мы хотим убедиться, что передаются только значения из списка, и они обычно могут быть жестко закодированы. Поэтому мы хотели бы создать перечисление, которое можно использовать в коде, чтобы обеспечить передачу допустимых значений.

Я создал простой файл node.js, который может генерировать файл JS с перечислением прямо из хранилища данных. Это может быть восстановлено в любое время, когда файл изменяется или может быть по расписанию. Но совместное использование файла enum с любыми приложениями node.js, которые его используют, не будет тривиальным.

Кто-нибудь делал что-нибудь подобное? Любая причина, почему это было бы плохим подходом? Любые отзывы приветствуются.

Ответы [ 2 ]

2 голосов
/ 21 мая 2019

Отклонение от этого ответа , который описывает способ создания «enum» в JavaScript: вы можете получить список констант с вашего сервера (через вызов HTTP), а затем сгенерироватьenum в коде, без необходимости создания и загрузки исходного файла JavaScript.

Учитывая, что вы загрузили enumConstants из серверной части (здесь я их жестко запрограммировал):

const enumConstants = [
    'FIRST',
    'SECOND',
    'THIRD'
];

const temp = {};

for (const constant of enumConstants) {
    temp[constant] = constant;
}

const PlaceEnum = Object.freeze(temp);

console.log(PlaceEnum.FIRST);

// Or, in one line
const PlaceEnum2 = Object.freeze(enumConstants.reduce((o, c) => { o[c] = c; return o; }, {}));

console.log(PlaceEnum2.FIRST);

Он не идеален для анализа кода или при использовании интеллектуального редактора, поскольку объект не определен явно, и редактор будет жаловаться, но он будет работать.

1 голос
/ 21 мая 2019

Другой подход - использовать массив и искать его элементы.

const members = ['first', 'second', 'third'...]

// then test for the members
members.indexOf('first') // 0
members.indexOf('third') // 2
members.indexOf('zero') // -1
members.indexOf('your_variable_to_test') // does it exist in the "enum"?

Любое значение> = 0 будет членом списка. -1 не будет участником Это не «блокирует» объект как стоп-кадр (см. Выше), но я считаю, что этого достаточно для большинства моих похожих сценариев.

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