Переопределение метода модуля узла


Я использую модуль 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 2

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