#javascript #html #node.js #express
#javascript #HTML #node.js #экспресс
Вопрос:
Контекст
Я создаю встроенный в браузер редактор html / js, для этого я использую memory-fs (виртуальную память) с Webpack и webpack-html-plugin для объединения файлов, которые пользователь создает в редакторе. Файлы записываются в виртуальную память, чтобы избежать операций ввода-вывода, которые будут происходить всякий раз, когда какой-либо пользователь компилирует свою программу в редакторе браузера.
Проблема
Используя node.js как мне обслуживать результирующий html js-bundle?
Я знаю, что могу использовать
express.get('/:id', (req,res) =>...)
создавать динамические маршруты, которые я могу сопоставить с правильным выводом. Я также знаю, что могу использовать
res.send(html-string-from-virtual-memory)
чтобы обслуживать html в виде строки. Однако я не знаю, будет ли это обслуживать также связанный javascript, который будет включен в html-файл с тегом script, подобным этому:
<script type="text/javascript" src="index_bundle.js?a9d6aa105c772d02e0f9"></script>
Что произойдет, когда браузер доберется до этой части? Отправит ли это другой запрос, который мне придется обрабатывать на стороне сервера с помощью другого .get()
? Как это должно выглядеть? Понятия не имею.
Node.js создан для обслуживания статических файлов по /public
пути с диска, чтобы легко обрабатывать их, поэтому я испытываю трудности, потому что он не позволяет мне обрабатывать извлечение файлов вручную (он просто запрашивает путь и обрабатывает файлы сам), чтобы получить файлы из виртуальной памяти.
Ответ №1:
Да, когда браузер увидит <script>
тег, он отправит новый запрос для файла JavaScript. В Node вы можете создать нового express.get()
прослушивателя и отправлять JavaScript точно так же, как вы отправляете HTML.
res.send(javascript-string-from-virtual-memory)
Комментарии:
1. Я пытаюсь это сделать, но у меня другая проблема. Я использую
router.get('/output/:id, ...)
для обслуживания html, затем пытаюсь использоватьrouter.get('/output/:id/index_bundle.js?:hash',...)
для JS, однако браузер отправляет запрос на JS по адресу/output/index_bundle.js?:hash'
. Есть идеи, как это исправить? Мне нужно:id
знать, какой файл обслуживать, но по какой-то причине браузер вылетает из-за:id
параметра