Подтвердить что ты не робот

Как подключить суб-приложения express.js?

У меня есть несколько приложений, которые я пытаюсь объединить в один "набор": 2 приложения являются автономными, один - просто слоем auth (используя everyauth для FB Connect). Я хочу настроить его так:

  • /- (домашний) список приложений
  • /auth - логин для любого приложения
  • /app1 - требуется вход через /auth для доступа
  • /app2 - (тот же)

Я рассмотрел возможность оставить app1 и app2 автономными, причем верхний слой является прокси-сервером, но я думаю, что было бы сложно разделить между ними систему auth. Virtualhosts (через Connect) может работать, но мне не обязательно нужен субдомен DNS'd для каждого из них. Поэтому вместо этого я хотел бы, чтобы основное приложение являлось слоем auth, а остальные "монтировались" в него, причем базовый путь, установленный в каждом приложении, был подпуть. (базовый путь упоминается в выражении Guide, но не задокументирован.)

Все они используют MongoDB, уровень auth использует connect-mongodb для сеансов, поэтому я надеюсь, что они смогут совместно использовать весь уровень аутентификации/сеанса между ними.

В другом потоке Как обмениваться сеансами в установленных экспресс-приложениях, пишет Стивен,

У меня довольно сложное экспресс-приложение для веб-приложений, которое разделено на несколько вспомогательных приложений, которые также являются экспресс-приложениями (с помощью app.use())...

Итак, как использовать app.use() для монтирования суб-приложения? Я просто пытался использовать var subApp = require('./subapp/app.js'), при этом listen() работает только в суб-приложении, когда ! module.parent (а не как суб-приложение)... но это, похоже, загружает все пути суб-приложения прямо в родительское приложение. Я пробовал настройку basepath с помощью app.set('basepath', '/subapp/'), app.basepath = '/subapp/' и т.д. Как в самом суб-приложении, так и в родительском приложении, но это, похоже, не имеет никакого эффекта.

Установка таких приложений делает невероятно гибкой, но неясно, как это сделать... любые советы были бы очень желанными! (И я рад поделиться уроками из моей реализации everyauth, если кто-то борется с этим.)

4b9b3361

Ответ 1

app.use(uri, instanceOfExpressServer)

Просто убедитесь, что вы не вызываете .listen на нем.

Альтернативой является использование require("cluster") и вызов всех ваших приложений в одном ведущем устройстве, чтобы они имели один и тот же порт. Затем просто выполните маршрутизацию "просто работайте"

Ответ 2

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

//Default configuration
app.configure(function(){
    app.use(express.compress());
    app.use(express.logger('dev'));
    app.set('json spaces',0);
    app.use(express.limit('2mb'));
    app.use(express.bodyParser());
    app.use('/api', app.router);
    app.use(function(err, req, res, callback){
        res.json(err.code, {});
    });
});

Обратите внимание на "/api" при вызове маршрутизатора