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