所以我有这个使用angularJS和nodeJS的网络应用程序。我不想只使用localhost来演示我的项目,因为当我键入" node server.js"时,它看起来并不酷。然后去localhost .....
由于我打算将Firebase用于数据,因此我注意到Firebase提供了托管服务。我尝试过,但它似乎只托管index.html而不是通过/使用server.js。我有自定义文件供服务器使用/更新。那么,如何在托管时告诉Firebase Hosting使用我的服务器和相关文件?
是否有可能告诉Firebase,嘿,运行" node server.js"托管我的index.html?
答案 0 :(得分:11)
我猜测你想要从#34; 互联网"
中找到这个网站的问题。你可以去这两条路线。
a)通过Firebase托管服务您的索引。 Firebase仅托管资产。如果您的Angular应用程序是通过Node提供的,那么您需要将您的架构更改为 SPA-ish
SPA-ish 就像一个索引引导程序,它纯粹通过API与后端交互。
您可以通过Nodejitsu等更合适的方式托管API服务器。
b)通过Nodejitsu(托管平台)或您自己的VM(由BuyVM.net等不同类型的托管公司管理)提供服务。
答案 1 :(得分:5)
另一个想法是,如果您的nodejs应用程序独立于angularjs应用程序(但是它们使用共享数据,并对该数据模型执行操作),您可以将两者分开并仅通过firebase连接它们。
Firebase托管 - > index.html和必要的angularjs文件。
本地(您的电脑) - > 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上的数据,以及#34; new" (这可以通过angularjs很简单地完成,例如使用ng-click操作)它会安排特定日期和时间的录音(此时并非所有实际功能)。
答案 2 :(得分:2)
I might be late but since 3 years have passed there is an solution available now from Firebase in the form of cloud functions Its not straight forward but looks promising if one can refactor their code a bit