14

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

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

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

4

3 に答える 3

5

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

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

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

私はいくつかのプロジェクトでこれを行いましたが、やみくもにポートを開かないようにすることで、ある程度のセキュリティ維持しながら、外の世界 (インターネット) にアクセスする便利な方法です。

友達の家にいる間、家でクロムキャストを制御するためにこれを行うことができました

これは私の最近のプロジェクトの例です (私は 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 操作を使用して実現できます)、特定の日時 (すべてではない) の記録がスケジュールされます。現時点では実際に機能しています)。

于 2015-01-06T07:01:10.097 に答える