2017-02-20 3 views
0

Ich muss einige Daten von einer Drittanbieter-API in meiner App verwenden, die erforderlichen Daten mit einer bestimmten Häufigkeit vom Server abrufen und dem Client zur Verfügung stellen. Der einfachste Weg wäre, eine Sammlung zu erstellen und zu aktualisieren und die Daten über Pub/Sub für den Client verfügbar zu machen. Aber in diesem speziellen Fall muss ich diese Daten nicht speichern oder verfolgen, und sie werden sehr häufig aktualisiert, so dass das Speichern in db nur zusätzliche unnötige Arbeit wäre. Ich würde es vorziehen, es irgendwie im RAM zu speichern, und es dem Klienten auf andere Weise außer Ansammlungen zur Verfügung zu stellen (vielleicht Rückkehr von einem Methodenaufruf). Aber ich bin mir nicht sicher, wie das geht. Könnte jemand einen netten Ansatz vorschlagen?meteor.js - temporärer serverseitiger App-Status

+0

Das Speichern von Daten im Speicher würde durch Deklarieren einer Variablen erfolgen, d.h. 'var someData = fetchedData'. –

+0

Warum haben Sie Angst vor Meteor-Methode? – ghybs

Antwort

1

Sie dieses Paket nutzen könnten meteor-publish-join Daten aus externen API zu holen und in regelmäßigen Abständen zu Client veröffentlichen (Disclaimer: Ich bin der Autor):

Server:

import { JoinServer } from 'meteor-publish-join'; 

Meteor.publish('test', function() { 

    // Publish a random value from an external API, plays well with promise, re-run every 10 seconds 
    JoinServer.publish({ 
    context: this, 
    name: 'withPromise', 
    interval: 10000, 
    doJoin() { 
     const id = parseInt(Math.random() * 100, 10); 

     return fetch(`https://jsonplaceholder.typicode.com/posts/${id}`) 
     .then(res => res.json()) 
     .then(data => data.title) 
     .catch(err => console.error(err)); 
    }, 
    }); 
}); 

Auftraggeber:

Import {JoinClient} von 'meteor-publish-join';

Meteor.subscribe('test'); 

// Get the values published within `test` publication. All these values are reactive 
JoinClient.get('withPromise') 
+0

Das ist ein gutes Paket und ich habe es für genau Ihren Anwendungsfall verwendet. – DoctorPangloss