繁体   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