2017-09-25 6 views
0

私の目標は、ノードjsサーバの1つのインスタンス内に複数のノードJS "apps"を持つことです。たとえば、従来のPHPホスティングでは、wwwディレクトリに異なるフォルダを置くことができ、それらのフォルダは別々のルートとして動作します。私がfolder1とfolder2をwww.example.com/folder1またはwww.example.com/folder2に行くサブディレクトリとして持っていれば、独自のindex.htmlとすべてを持つアプリケーションになります。ノードJS "apps"を1つのサーバで分離する

ノードJSでは、個々のサーバーサイドPHPスクリプトを呼び出す代わりに、実行中のメインサーバーを呼び出すため、少し異なります。 socket.ioのようなものでは、socket( 'on' ...)とsocket( 'emit' ...)を使ってサーバーと通信し、特定のスクリプトを呼び出すのではなく、サーバーと通信します。

私はこれは、例えばファイル構造であるかもしれないノードJS

以内にPHPの機能を模倣してみたい:私はapp.jsファイルが内のすべてのルートを持っているだろうと想像

main 
|--sites 
    |--site1 
    | |--index.js 
    | |--public 
    |--site2 
    | |--index.js 
    | |--public 
    |--landing 
     |--index.js 
     |--public 
|--app.js 

それ。 「/」は着陸フォルダーに、「/ site1」はsite1フォルダーなどに指定されていました。

しかし、私が望むのは、これらの「アプリ」がそれぞれ分離されていることです。 index.jsは、そのアプリに隔離されたサーバーになります。そのアプリケーション内のルーティングとすべてが、新しいapp.jsのようにすべて再実行されますが、別々のノードアプリではなく、サブディレクトリだけです。

これは可能ですか?実装のためのコード例をいくつか教えていただけますか?

+0

あなたがAppと言うとき、あなたは表現することを言いますか?そうであれば、あなたのルートで別のエクスプレスアプリを作成し、ルートにアタッチしてください。 – Keith

+0

これを実装するには、ノードアプリケーションの前にプロキシを置いて、プロキシがホスト名やヘッダなどに基づいて適切なホスト/ポートにトラフィックを送信できるようにします。 – Aknosis

+0

@Keith少し詳しく説明できますか?このようなもの: 'app.use( '/ firstsite'、require( './ sites/firstsite'))'? これらの各フォルダのindex.jsファイルは、そのアプリケーションの独立したサーバーとして機能するのですか、それでもapp.jsと通信しようとしていますか?いくつかのコード例で答えることができますか? –

答えて

1

expressを使用している場合、expressの複数のインスタンスを作成することができます。その後、メインルータに接続してください。

例えば、

あなたは、その後のようなもの持っているあなたのメインエントリポイントを作成することができ

..あなたが/app1/app.js

const express = require('express'); 

const app = new express(); 
app.get('/xyz'); //etc.. 

module.exports = app; 

と基本的に同じであることを、別の/app2/app.jsを言うを持っているとしましょう - >

const app = new express(); 
app.use('/app1', require('./app1/app')); 
app.use('/app2', require('./app2/app')); 

/app1/*へのすべてのリクエストはapp1に、/app2/*はapp2へ移動します。

+0

恐ろしい!これは私が欲しいものを達成するように思える。ありがとう:) –

関連する問題