簡體   English   中英

使用firebase托管nodeJS應用程序

[英]Hosting nodeJS app with firebase

所以我有這個使用angularJS和nodeJS的網絡應用程序。 我不想只使用localhost來演示我的項目,因為當我鍵入“node server.js”然后轉到localhost時,它看起來並不酷。

由於我打算將Firebase用於數據,因此我注意到Firebase提供了托管服務。 我嘗試過,但它似乎只托管index.html而不是通過/使用server.js。 我有自定義文件供服務器使用/更新。 那么,如何在托管時告訴Firebase Hosting使用我的服務器和相關文件?

是否有可能告訴Firebase,嘿,運行“node server.js”來托管我的index.html?

我猜測你想要從“ 互聯網 ”看到這個網站的問題的方式。

你可以去這兩條路線。

a)通過Firebase托管服務您的索引。 Firebase僅托管資產。 如果您的Angular應用程序是通過Node提供的,那么您需要將您的架構更改為SPA-ish

SPA-ish 就像一個索引引導程序,它純粹通過API與后端交互。

您可以通過Nodejitsu更合適地托管API服務器。

b)通過Nodejitsu(托管平台)或您自己的VM(由BuyVM.net等不同類型的托管公司管理)提供服務。

另一個想法是,如果您的nodejs應用程序獨立於angularjs應用程序(但是它們使用共享數據,並對該數據模型執行操作),您可以將兩者分開並僅通過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操作),它將為特定日期和時間安排錄制(並非所有實際上功能正好)。

我可能會遲到但是自從3年過去以來,Firebase以雲函數的形式提供了一個解決方案。它不是直截了當但看起來很有希望如果可以重構一下它們的代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM