Я работаю над бэкендом для программы домашней автоматизации, которую пишу в Node.js, используя экспресс в качестве маршрутизатора.В настоящее время у меня есть около 50 маршрутов для внешнего интерфейса для передачи информации в бэкэнд и из него, но эти маршруты иногда бывают довольно длинными, они охватывают различные аспекты программы (запрос и обновление состояний устройства, работа с действиями и сторонние API, такие какGoogle и Plex и т. Д.).Я планирую переместить мои маршруты в отдельные файлы, чтобы повысить удобочитаемость и способность поддерживать код / маршруты, но я столкнулся с проблемой.Ниже приведен пример одного из моих маршрутов:
app.route('/api/devices/:deviceID/set/:state').get( async (req, res) => {
if (!checkRequest(req, res)) return;
var index = parseInt(req.params.deviceID);
var device = devices[index];
if (device === undefined) {
res.status(404).json({error: 'DeviceNotExist'});
return;
}
var state = req.params.state === '1' ? true : (req.params.state === '0' ? false : undefined);
let d = await device_tools.setDeviceState(device, state, modules);
if (d === undefined) {
res.status(500).json({error: 'DeviceNotResponsive'});
return;
}
let dd = getSendableDevice(d.deviceID);
res.json(dd);
});
Как видите, сам маршрут зависит от массива объектов 'devices' и объекта 'modules', которые являются переменными в моем server.jsфайл.Тем не менее, есть несколько маршрутов (включая тот, что указан выше), которые изменяют сами объекты.Я обошел это раньше, требуя, чтобы функции вне server.js передавали им переменные (как в строке, которая вызывает setDeviceState из модуля device_tools), но поскольку маршруты не являются «функциями» в том смысле, чтоЯ могу назвать их, я не могу передать эти «глобальные» (они не глобальные, но я не знаю, как описать их область видимости, может быть, верхнего уровня?) Переменные конечным точкам API.К счастью для меня, я нахожусь в процессе полной реорганизации программы в любом случае (переходя от модулей к объектам ES6, которые могут инкапсулировать статические функции в классе объектов, а также определять и абстрагировать элементы данных объектов), поэтому яоткрыт для любых предложений, однако я предпочитаю придерживаться как можно более близкого к vanilla JS, поскольку я не хочу добавлять дополнительные зависимости, если смогу помочь.Если моего объяснения проблемы недостаточно, я более чем рад опубликовать больше кода и действительно разобрать его, если оно приблизит меня к решению.Заранее спасибо!