Почему я должен иметь префикс всех моих обработчиков маршрутов - PullRequest
1 голос
/ 27 февраля 2012

Я создаю приложение, используя Expressjs , работающее на узле в IISNode (то есть на окнах).

Я начинаю с того, что настраиваю все очень похоже на все expressjs примеры, которые я видел:

  backend.configure(function() {
    backend.register('html', {
      compile: function(str, options) {
        return function(locals) {
          return str;
        };
      }
    });
    backend.set('views', __dirname + '/views');
    backend.set('view engine', 'html');
    backend.set('view options', {
      layout: false
    });
    backend.use(express.bodyParser());
    backend.use(backend.router);
    backend.use(express.static(__dirname + '/public'));
  });  

Допустим, мой сайт работает на localhost: //мой сайт.Мне нужно создать все мои обработчики маршрутов следующим образом.

  backend.get('/mysite/index', function(req, res, next) {
    return res.render('index');
  });

то есть мне нужно поставить перед ними префикс «mysite».Ни один из примеров, которые я видел, не требует этого.Это как-то связано с IISNode или чем-то еще, что я не настроил?

Ответы [ 3 ]

6 голосов
/ 19 апреля 2013

Я искал эту функцию, но для маршрутов 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' при вызове маршрутизатора

1 голос
/ 27 февраля 2012

Из коробки, это действительно, как вы должны это сделать. Вы можете взглянуть на express-resource , включающий ресурсоемкую маршрутизацию - но это имеет свои собственные предостережения, по крайней мере, когда речь идет о промежуточном программном обеспечении для конкретного маршрута.

Если это всего лишь один путь, я думаю, вы можете справиться с этим с помощью app.set("basepath", "mysite").

0 голосов
/ 07 марта 2012

Чтобы избежать необходимости изменять приложение Express при развертывании в IIS с использованием iisnode, необходимо развернуть его в корневом каталоге веб-сайта IIS, а не в виртуальном каталоге на сайте.

...