2016-02-10 2 views
0

У меня есть проект Express.js, где я разрешаю загружать и выгружать плагины во время выполнения. Плагины имеют доступ к стеке маршрутизатора Expess.js зарегистрировать свои пути так же, как обычный скрипт будет такими как:Remove Router From Express.js Route Stack

var express = require('express'); 
var router = express.Router(); 

module.exports = function(projectCoreObject) { 
    function Plugin() { } 

    // Plugin initialize called when a plugin is loaded. 
    Plugin.Initialize = function (done) { 
     // Register the router.. 
     projectCoreObject.app.use('/', router); 
    }; 

    // GET - /test 
    router.get('/test', function(req, res, next) { 
     res.send('Success!'); 
    }); 

    return Plugin; 
}; 

В то время как это все прекрасно работает, у меня есть проблемы с разгрузкой плагин удаляя их маршрутизатор из стека.

Есть ли способ удалить полный объект маршрутизатора из стека Express.js во время выполнения? Я могу использовать индивидуальное промежуточное программное обеспечение, используя их имена, но с указанием маршрута, как показано в этом примере, это имя просто «маршрутизатор» в стеке.

+0

Я не верю, что есть поддерживаемый способ сделать это. В реализации приложения (который использует внутренний маршрутизатор) существует множество маршрутов. Вам нужно будет найти нужную запись в этом массиве и использовать '.splice()', чтобы удалить ее из массива. – jfriend00

+0

Возможно, вам стоит посмотреть на socket.io. – nottinhill

+1

Это не имеет никакого отношения к socket.io ... – atom0s

ответ

1

Я решил это, используя трюк с именованной функцией, чтобы принять анонимную функцию и превратить ее в именованный. Таким образом, я могу удалить маршрутизатор по его имени.