Sök…


Så här använder du eldbaskön som backend för din applikation

Firebase tillhandahåller backend som en tjänst, som applikationsutvecklare har du inget alternativ att ha backendkod.

Det här exemplet visar hur du använder firebas-kön, skapar backend som fungerar längst upp i databasen och fungerar som en backend för din frontend-applikation.

Innan du går in i koden låter oss förstå arkitekturen, hur den kommer att fungera. För korthet kan vi anta att vi använder webbplatsen som en frontend och NodeJs server som en backend

förutsättningar

  1. Skapa brandbasapplikation med ditt Google-konto

  2. Lägg till eldfas till din webbsida. Använd bower install firebase --save

  3. Skapa servicekonto med ditt nya skapade brandkonto (Inställningar-> Behörigheter -> Servicekonton -> SKAPA TJÄNSTKONTO -> (ange namn och markera kryssrutan "Möbler en ny privat nyckel") -> spara json-filen, vi behöver det senare.

  4. Konfigurera NodeJs-server som kan vara värd i din önskade miljö

  5. Skapa följande slutpunkt i queue/specs

    "Request_response"

     {
         "error_state": "request_error_processing",
         "finished_state": "finished_state",
         "in_progress_state": "request_in_progress",
         "start_state": "request_started"
     }
    
  6. Inuti NodeJs-servern installerar firebas-servernsideversion, npm install firebase --save , och intialiserar ditt servicekonto med json-filen som vi fick från steg 3, det ser ut så här

    firebase.initializeApp ({serviceAccount: './your_file.json', databasURL: 'get_from_firebase_account'});

Arkitektur

Här är hela cykeln hur det fungerar.

På framsidan kommer du att göra dessa steg

  1. Med hjälp av firebase web sdk skriver du dina förfrågningar direkt till brandbasdatabasen i slutpunkten "kö / uppgifter", låter ringa din begäran som du skickar till backend.
  2. efter att du har lagt in din uppgift registrerar du lyssnaren i slutpunktskön queue/tasks/{taskKey} som skulle kallas när backend är klar med att behandla din begäran, skriva svar inuti ovanstående uppgift

På baksidan kommer du att göra dessa steg

  1. Skapa server som oändligt lyssnar slutpunkten "kö / uppgifter"
  2. Behandlar dina uppgifter och skriver tillbaka svarsdata inuti queue/tasks/response
  3. Ta bort uppgiften

Skapa först denna hjälpfunktion, som ger ett sätt att hantera återuppringningar och löften tillsammans

function createPromiseCallback() {
    var cb;
    var promise = new Promise(function (resolve, reject) {
        cb = function (err, data) {
            if (err) return reject(err);
            return resolve(data);
        };
    });
    cb.promise = promise;
    return cb;
}

På framsidan kommer du att ha den här funktionen

function sendRequest(kind, params, cb) {

    cb = cb || createPromiseCallback();
    var requestObject = {
        kind: kind,
        params: params
    };
    var tasksRef = firebase.database().ref('queue/tasks');

    var requestKey = tasksRef.push().key;

    var requestRef = tasksRef.child(requestKey);

    function requestHandshake(snap) {
        if (snap && snap.exists() && (snap.val().response || snap.val()._state ===    config.firebase.task.finishState || snap.val()._error_details)) {
            var snapVal = snap.val();
            if (snapVal._error_details) {
                cb(snapVal._error_details.error);
            } else {
            cb(null, snapVal.response);
        }
        requestRef.off('value', requestHandshake);
    }
   }

   var bulkUpdate = {};
   bulkUpdate['queue/tasks/' + requestKey + '/request'] = requestObject;
   bulkUpdate['queue/tasks/' + requestKey + '/_state'] = config.firebase.task.startState;

   firebase.database().ref().update(bulkUpdate)
    .then(function (snap) {
        requestRef.on('value', requestHandshake);
    }).catch(function (err) {
        cb(err);
    });

   return cb.promise;
  }

Du kan använda den här funktionen som sendRequest('CreateHouseFacade', {houseName:'Test'}) .

Vänlig parameter är för backend, för att veta vilken metod som ska anropas för behandlingsbegäran. Params är för att skicka ytterligare parameterinformation.

Och här är backendkoden

const database = firebase.database();
const queueRef = database.ref('queue');

const queueOptions = {
    'specId': 'request_response',
    'sanitize': false,
    'suppressStack': false,
    'numWorkers': 3
};

function removeTask(task) {
    var taskRef = queueRef.child(`tasks/${task._id}`);
    return taskRef.remove();
}

function processTask(data, progress, resolve, reject) {
    try {
        requestHandler(data.request).then(response => {
            data.response = response || null;
            return resolve(data);
        }).catch(err => {
            return reject(err);
        }).then(snap => {
            removeTask(data);
        });
    } catch (err) {
        reject(err).then(snap => removeTask(data));
    }
}

function requestHandler(request) {
    if (!request || !request.kind) throw new Error('Absent Request or Kind');
    var deferredResponse = requestHandlerFactory(request.kind, request.params);
    return deferredResponse;
}

function requestHandlerFactory(kind, params) {
    // It includes mapping all your backend services
    switch (kind) {
        case 'CreateHouseFacade': return myService(params)
        default: throw new Error(`Invalid kind ${kind} was specified`);
    }
}

Funktionen myService innehåller din affärslogikkod som kommer att utföra CreateHouseFacade begäran.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow