Я пытаюсь вызвать API из приложения Electron и не могу найти способ, как правильно это настроить.
Сначала немного контекста. Вариант использования - это веб-SPA, который я хотел бы предложить в качестве настольного приложения с минимальными изменениями в существующей кодовой базе. Я связываю все соответствующие статические файлы, созданные веб-пакетом, в приложение Electron (мои main.js
звонки win.loadFile('index.html')
), но затем возникают вызовы API для данных. В кодовой базе это легко идентифицируемые URL, начинающиеся с "/ api /". Это прекрасно работает, когда используется в качестве веб-SPA, но завершается неудачно, когда упаковывается в Electron, так как предполагает, что это вызов статического файла.
Документация и существующие потоки StackOverflow по теме редки, но я пытался использовать interceptHttpProtocol/ interceptFileProtocol без особого успеха. Мой первый вопрос: действительно ли это то, что я должен использовать в этом случае, или есть другой механизм?
Если (и это большое, если) я должен использовать эти перехватчики, из документации, которую яне очень понимаю, как они работают. Если я хочу изменить вызов файла на http, я понимаю, что это будет protocol.interceptHttpProtocol('file'...)
, но я не уверен на 100%. В любом случае, простое выполнение:
protocol.interceptFileProtocol('file', (request, callback) => {
callback({ path: request.url.substr(7) });
}
(идея здесь заключается в том, чтобы ничего не делать - преобразовать файловый вызов в тот же файловый вызов только для проверки функциональности перехватчика), что приводит к пустой странице и «Не разрешено». загрузить локальный ресурс "ошибка. Если я установлю webSecurity: false
, я просто получу пустую страницу без ошибок. Аналогичные результаты с использованием interceptHttpProtocol и ссылки на google.com.
Указатели в правильном направлении очень ценятся.
В качестве плана BI можно использовать переписчики URL-адресов Service Workers или Webpack для изменения URL-адресов по сравнению сАбсолютно, но это было бы чем-то вроде взлома - безусловно, есть «правильный» способ сделать это.