Переопределение метода модуля узла
Я использую модуль keystone node для разработки страниц на основе cms в моем приложении.
Я инициализирую keystone, просто добавив его в свой JS-файл как: var keystone = require('keystone');
Но проблема, с которой я сталкиваюсь в настоящее время, заключается в том, что маршрут для каждой функции keystone based cms является
localhost:3000/keystone/<featue-name>
Я хочу удалить keystone из url с другим именем, необходимым для приложения. Внесение изменений в узле-модуле keystone делает трюк!
Но если я сделаю npm update
все мои изменения выходит напрасно. Обычно в других языках я использовал для этого METHOD OVERRIDING
. Я не знаю о переопределении метода в узле-модуле.
Есть ли другой способ сделать это?
2 ответа:
Из того, что я вижу в источнике , префикс пути администратора настраивается (просто не документируется):
keystone.init({ ... 'admin path' : 'your-own-path', ... });
(что сделало бы путь
localhost:3000/your-own-path/<feature-name>
)Если вы не используете последнюю версию Keystone, возможно, это может сработать (хотя это немного Хак):
keystone.pre('routes', function(req, res, next) { req.url = req.url.replace(/^\/your-own-path/, '/keystone'); next(); });
Что это делает, так это заменяет префикс
/your-own-path
в запрашиваемых URL-адресах на/keystone
, что-то вроде "внутреннего перенаправления".
Внесение изменений в исходный код в
node_modules
не является хорошим способом его решения, поскольку он не контролируется версиями, поэтому все, кто работает с РЕПО, должны будут изменить его вручную. Вместо этого вы можете разветвить РЕПО на свою учетную запись Github, внести изменения и затем установить эту версию Keystone:$ npm install --save keystone@git+https://github.com/your-username/keystone.git
Еще лучше, сделать исправление, которое по умолчанию
/keystone
, но можно изменить с помощью Keystone options и создать PR обратно в Keystone! Использование после того, как вы исправили его следует выглядит примерно так:keystone.set('url', 'custom'); // Changes /keystone to /custom