2014-10-29 30 views
11

Quindi ho questa web-app usando angularJS e nodeJS. Non voglio usare localhost per provare il mio progetto perché non sembra affatto bello quando digito "node server.js" e poi vado a localhost .....Hosting nodeJS app con Firebase

Dal momento che intendo usare Firebase per i dati, ho notato che Firebase fornisce hosting. L'ho provato, ma sembra ospitare solo index.html e non attraverso/using server.js. Ho personalizzato i file per il server da utilizzare/aggiornare. Quindi, come posso dire a Firebase Hosting di utilizzare il mio server e i file correlati durante l'hosting?

E 'possibile dire a Firebase, hey, eseguire "node server.js" per ospitare il mio index.html?

+6

Hosting Firebase può solo ospitare file statici. Non eseguirà il tuo codice node.js (o qualsiasi altro). Ma se attualmente server.js sta solo servendo file statici, puoi caricarli su Firebase Hosting e funzionerà correttamente. Se il tuo server.js fa di più e stai cercando dove ospitare questo codice node.js, ci sono una moltitudine di opzioni a google search away (chiedere tali consigli è off-topic per StackOverflow, dal momento che è probabile che ci sia molte preferenze in quanto vi sono utenti SO). –

+1

Dato che non si desidera utilizzare localhost/your_project perché "non sembra interessante", si consiglia di modificare il file hosts nel computer in modo da indirizzare qualsiasi dominio (anche google.com) sul proprio localhost. Ovviamente questo trucco funzionerà solo fino a quando visualizzi il sito web dal tuo computer. * strizza l'occhio * – gdebojyoti

+0

È ora possibile ospitare le app dei nodi. Consulta la risposta a questa domanda "Duplica" con i dettagli più aggiornati: https://stackoverflow.com/questions/42415677/can-i-use-firebase-hosting -to-write-a-restful-api-in-node-js –

risposta

11

Sto indovinando dal modo in cui si sta formando la domanda che si desidera vedere questo sito da "internet".

Due percorsi che potresti andare qui.

a) Fornire l'indice tramite l'hosting Firebase. Firebase ospita solo le risorse. Se la vostra applicazione angolare viene servito attraverso il nodo allora si avrà bisogno di cambiare l'architettura di essere più SPA-ish

SPA-ishsarebbe come un bootstrap indice che interagisce con il backend puramente attraverso API.

Ospitereste il server API su qualcosa di più appropriato come tramite Nodejitsu.

b) Servire il tutto tramite qualcosa come Nodejitsu (piattaforma di hosting) o la propria VM gestita da un diverso tipo di società di hosting come BuyVM.net.

+0

Grazie. La mia ultima app era puramente spa-ish. Questo è il motivo per cui voglio essere più coinvolto con i server. Proverò qualche nodo che ospita le cose. Grazie per la rapida risposta :) –

+0

Vedere la risposta a questa domanda "Duplica" con i dettagli più aggiornati: https://stackoverflow.com/questions/42415677/can-i-use-firebase-hosting-to-write -a-rilassante-api-in-node-js –

5

Un'altra idea è che se l'app nodejs è indipendente dall'app angularjs (tuttavia utilizzano dati condivisi ed eseguono operazioni su quel modello di dati) è possibile separare i due e collegarli solo tramite firebase.

Hosting di Firebase -> index.html e file angularjs necessari.

Locally (your PC) -> server.js che si collega a Firebase e trigger sui dati modificati.

Ho fatto questo per alcuni progetti ed è un modo pratico per accedere al mondo esterno (internet) mantenendo un po 'di sicurezza non aprendo le porte alla cieca.

sono stato in grado di fare questo per controllare un Chromecast a casa mia, mentre a casa di amici

Ecco un esempio dal mio progetto più recente (sto cercando di fare un 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"}); 
    } 
}); 

Quando cambio la mia "comandato" dati a FB_URL, al "nuovo" (che può essere realizzato con angularjs Molto semplicemente, tramite un'operazione ng clic, per esempio) che sarà programmare una registrazione per una data e un'ora particolari (non tutte attualmente funzionanti al momento).

1

potrei essere in ritardo, ma dal momento che sono passati 3 anni c'è una soluzione disponibile presso Firebase sotto forma di cloud functions La sua non è semplice, ma sembra essere molto promettente se una volta in grado di refactoring loro codice un po '