2017-06-03 1 views
0

J'essaie d'apprendre de an example à utiliser express avec guidon sur la base de feu.Comment utiliser hapi js sur Firebase Cloud Function?

Pour la voie express, nous pouvons envoyer l'instance "app" directement au "functions.https.onRequest" comme ...

const app = express(); 
... 
app.get('/', (req, res) => { 
    ... 
}); 

exports.app = functions.https.onRequest(app); 

See live functions

Comme je crois comprendre qu'il fonctionne parce que " exprimer "agir comme http-node, de sorte qu'il peut répondre" http plain ".

comparaison à Hapi, ici est bonjour monde

const Hapi = require('hapi'); 
const server = new Hapi.Server(); 
server.connection({ 
    host: 'localhost', 
    port: 8000 
}); 

server.route({ 
    method: 'GET', 
    path:'/hello', 
    handler: function (request, reply) { 
     return reply('hello world'); 
    } 
}); 

server.start((err) => { 
    console.log('Server running at:', server.info.uri); 
}); 

Dans l'exemple Hapi, est-il possible d'utiliser la fonction Hapi nuage firebase? Est-ce que je peux utiliser hapi sans démarrer un serveur comme Express?

+0

Vous devez utiliser hapi ou exprimer avec une base ignifuge. Fire Base Handels routage pour vous donc il n'y a pas besoin d'un cadre de routage. Gardez vos fonctions légères. Si vous souhaitez afficher des modèles de guidons, utilisez simplement un guidon. – philipheinser

Répondre

0

Ce code a été tout droit que j'ai mélangé l'API expresse utilisé par Firebase avec hapijs API, grâce au blog donné par Monsieur @dkolba Vous pouvez ivoke le gestionnaire de hapijs url en allant http://localhost:5000/your-app-name/some-location/v1/hi

exemple : http://localhost:5000/helloworld/us-central1/v1/hi

const Hapi = require('hapi'); 
const server = new Hapi.Server(); 
const functions = require('firebase-functions'); 

server.connection(); 

const options = { 
    ops: { 
     interval: 1000 
    }, 
    reporters: { 
     myConsoleReporter: [{ 
      module: 'good-squeeze', 
      name: 'Squeeze', 
      args: [{ log: '*', response: '*' }] 
     }, { 
      module: 'good-console' 
     }, 'stdout'] 
    } 
}; 

server.route({ 
    method: 'GET', 
    path: '/hi', 
    handler: function (request, reply) { 
     reply({data:'helloworld'}); 
    } 
}); 
server.register({ 
    register: require('good'), 
    options, 
}, (err) => { 

    if (err) { 
     return console.error(err); 
    } 

}); 



// Create and Deploy Your First Cloud Functions 
// https://firebase.google.com/docs/functions/write-firebase-functions 
exports.v1 = functions.https.onRequest((event, resp) => { 
    const options = { 
     method: event.httpMethod, 
     url: event.path, 
     payload: event.body, 
     headers: event.headers, 
     validate: false 
    }; 
    console.log(options); 
    server.inject(options, function (res) { 
     const response = { 
      statusCode: res.statusCode, 
      body: res.result 
     }; 
     resp.status(res.statusCode).send(res.result); 
    }); 
    //resp.send("Hellworld"); 

}); 
1

Jetez un oeil à la méthode d'injection (dernier exemple de code): http://www.carbonatethis.com/hosting-a-serverless-hapi-js-api-with-aws-lambda/

Cependant, je ne pense pas que cela est possible, parce que vous aurez encore besoin de tenir sur l'objet de réponse de l'instance de l'application expresse Google Cloud Functions fournir aux fonctions déclenchées http, comme send(), redirect() ou end() fonctionnera pour répondre à la demande entrante et non les méthodes de hapi (voir https://firebase.google.com/docs/functions/http-events).