web-dev-qa-db-ja.com

Firebaseを使用してnodeJSアプリをホストする

だから私はangularJSとnodeJSを使ったこのウェブアプリを持っています。 「nodeserver.js」と入力してlocalhost ....に移動すると、プロジェクトのデモがまったくクールに見えないため、localhostを使用してプロジェクトをデモしたくありません。

データにFirebaseを使用するつもりなので、Firebaseがホスティングを提供していることに気付きました。試しましたが、index.htmlのみをホストし、server.jsを介して/使用していないようです。サーバーが使用/更新するファイルをカスタマイズしました。では、ホスティング時にサーバーと関連ファイルを使用するようにFirebase Hostingに指示するにはどうすればよいですか?

Firebaseに「nodeserver.js」を実行してindex.htmlをホストするように指示することはできますか?

14
Bones and Teeth

インターネット」からこのサイトを見たいという質問の言い方をしていると思います。

ここに行くことができる2つのルート。

a)Firebaseホスティングを介してインデックスを提供します。 Firebaseはアセットのみをホストします。 AngularアプリがNodeを介して提供されている場合は、アーキテクチャをより多くのSPAっぽいものに変更する必要があります

SPAっぽいは、純粋にAPIを介してバックエンドと対話するインデックスbootstrapのようになります。

Nodejitsuなどのより適切な場所でAPIサーバーをホストします。

b)Nodejitsu(ホスティングプラットフォーム)のようなもの、またはBuyVM.netのような別の種類のホスティング会社によって管理されている独自のVM)を通じてすべてを提供します。

10
Dan Kanze

もう1つのアイデアは、nodejsアプリがangularjsアプリから独立している場合(ただし、共有データを使用し、そのデータモデルで操作を実行する場合)、2つを分離し、Firebaseを介してのみ接続できます。

Firebaseホスティング-> index.htmlおよび必要なangularjsファイル。

ローカル(PC)-> server.jsは、firebaseに接続し、変更されたデータでトリガーします。

私はいくつかのプロジェクトでこれを行いました。これは、ポートを盲目的に開かないことで、セキュリティの一部の外観を維持しながら、外の世界(インターネット)にアクセスするための便利な方法です。 。

友達の家にいる間、家でChromecastを制御するためにこれを行うことができました

これが私の最新のプロジェクトの例です(私はDVRを作ろうとしています)。

https://github.com/onaclov2000/webdvr/blob/master/app.js

var FB_URL = '';
var Firebase = require('firebase');

var os = require('os')
var myRootRef = new Firebase(FB_URL);

var interfaces = os.networkInterfaces();
var addresses = [];
for (k in interfaces) {
    for (k2 in interfaces[k]) {
        var address = interfaces[k][k2];
        if (address.family == 'IPv4' && !address.internal) {
            addresses.Push(address.address)
        }
    }
}

// Push my IP to firebase
// Perhaps a common "devices" location would be handy
var ipRef = myRootRef.Push({
    "type": "local",
    "ip": addresses[0]
});


myRootRef.on('child_changed', function(childSnapshot, prevChildName) {
   // code to handle child data changes.
   var data = childSnapshot.val();
   var localref = childSnapshot.ref();
   if (data["commanded"] == "new") {
      console.log("New Schedule Added");
      var schedule = require('node-schedule');
      var date = new Date(data["year"], data["month"], data["day"], data["hh"], data["mm"], 0);
      console.log(date);
      var j = schedule.scheduleJob(date, function(channel, program, length){
                 console.log("Recording Channel " + channel + " and program " + program + " for " + length + "ms");
      }.bind(null, data["channel"], data["program"], data["length"]));

      localref.update({"commanded" : "waiting"});
  }
});

FB_URLの「コマンド」データを「新規」に変更すると(angularjsで非常に簡単に、たとえばng-click操作を使用して実行できます)、特定の日時(すべてではない)の記録がスケジュールされます。現時点では実際に機能しています)。

5
onaclov2000

遅れるかもしれませんが、3年が経過したため、Firebaseから次の形式で利用できるソリューションがあります クラウド関数 簡単ではありませんが、コードを少しリファクタリングできれば有望に見えます

2
Ananda