Я довольно новичок в Node.js, и мне трудно понять, как можно загружать библиотеки или файлы, в runtime. По-видимому, это плохая идея загружать файлы во время выполнения, используя собственную функцию «require» Node.js, поскольку она блокирует ввод-вывод и поэтому не должна использоваться из обработчиков запросов. Таким образом, я предполагаю, что-то вроде этого следует избегать:Node.js - Загрузка файлов в Runtime
var http = require('http').createServer(function(req, res) {
var file = require('./pages/'+req.url);
res.end();
}).listen(8080);
Итак, есть ли способ, чтобы потребовать файлы времени выполнения, в неблокирующем/асинхронном способе?
Я не думаю, что всегда можно было бы загружать файлы в «время загрузки», а не во время выполнения, потому что, как в приведенном выше примере, единственный способ узнать, какой файл загрузить/потребовать - это получить имя через req.url
Недвижимость.
Так что это единственный вариант. Если все файлы в папке предварительно загружены, а затем вызваны по имени, в обратном вызове (используя fs.readdirSync
или что-то, чтобы перебирать все файлы в папке и сравнивать имена полученных файлов с свойством req.url
), но это похоже расточительный. «Предварительная загрузка» всех файлов в папке (возможно, около 50 файлов), а затем только с использованием одного из них, не кажется хорошей идеей. Я ошибаюсь?
В любом случае, я хотел бы просто узнать, есть ли способ потребовать от файлов в режиме исполнения лучше, неблокировать/асинхронно.
Спасибо!
Спасибо! Это отлично подходит для таких файлов, как статические файлы HTML, файлы CSS и т. Д. Но что, если это файл Javascript? Как мне оценить код Javascript, который я получаю из файла? ** eval ** на самом деле не очень хорошая идея, так как я должен это делать? – user2779891
Но разве это не считается плохой практикой? Я имею в виду, что 'require()' блокирует? – user2779891
Я удалил свой предыдущий комментарий, потому что он вводит в заблуждение. Я имел в виду, что если вам нужно что-то выполнить, тогда вы должны «require()» в начале приложения. Вот как 'require()' есть и должен использоваться. Вы не должны загружать функции в свое приложение после его запуска. – hexacyanide