Как обслуживать html js в node.js из виртуальной памяти?

#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 параметра