2012-02-27 3 views
1

私はノード上で実行されているExpressjsを使用してアプリケーションを作成していますを持っているために行う(すなわちWindowsの場合)。はなぜ<strong>IISNode</strong>下プレフィックスすべての私のルートハンドラ

私は非常にすべての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')); 
    }); 

は、私のサイトは、ローカルホストで実行されているとしましょう。私はすべてのルートハンドラを次のように作成する必要があります。

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

つまり、私はそれらにすべて「mysite」を付ける必要があります。私が見た例のうち、これは必要ではありません。これはIISNodeや他の何かを設定していないことと関係がありますか?

答えて

1

これは実際にはどのように行う必要があります。あなたはexpress-resourceを調べることができます。これはリソースの多いルーティングを可能にしますが、少なくともルート固有のミドルウェアに関しては、それ自体の警告が付いています。

1つのパスの場合は、app.set("basepath", "mysite")で処理できると思います。

+1

おかげライナスルータを呼び出すときに、私はapp.set(「BasePathの」、「個人用サイト」で任意の運を持っていなかったと思います。この

//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」のように見えます)。私はexpress-resourceを見ましたが、関連する[question](http://stackoverflow.com/questions/4375554/is-it-possible-to-set-a-base-url-for-nodejs-アプリ)。最後に私は[express-namespace](https://github.com/visionmedia/express-namespace)に行きました。それは[ウィンドウに問題があります](https://github.com/visionmedia/express-namespace/issues/11)ですが、express-namespace node_modulesフォルダ内のindex.jsファイルを修正することで簡単に修正できます。 –

0

iisnodeを使用してIISに展開する際にエクスプレスアプリを変更する必要がないようにするには、サイトの仮想ディレクトリではなくIIS WebSiteのルートに展開する必要があります。

+0

アプリケーション構造全体に不必要な変更を提案することがこの問題の解決策であると考える人がどれくらいいると思いますか?これは「それはできない」という恥ずかしがりな答えです。 – rainabba

6

私はこの機能を探していましたが、APIルートでは静的ファイルではありませんでした。私がしたのは、私がルータを初期化したときに、マウントパスを追加したということでした。だから私の構成は

+0

このソリューションは高速応答でスムーズに動作します。私はいくつかの明示的なサブアプリケーションを用意しています。このAPIはプレフィックス/ apiの下にこのソリューションを使ってAPIを提供しています。 – diosney

関連する問題