2016-07-27 4 views
1

Ich habe eine Mongo-Sammlung namens Einstellungen. Es speichert einige Einstellungen wie API-Schlüssel. Diese Einstellungen sollten innerhalb der Anwendung einstellbar sein, ohne auf den Server zuzugreifen.Wie kann ich Daten aus meiner Einstellungssammlung abrufen, bevor etwas anderes geladen wird?

Diese Einstellungen müssen geladen und auf dem Client vor allem anderen vorhanden sein. Weil im Fall der API-Schlüssel die API abstürzt, wenn der Schlüssel nicht definiert ist, bevor die API zu laden beginnt.

Ich kann settings.json nicht verwenden, weil, soweit ich weiß, Sie sie während der Laufzeit nicht ändern können. Settings.json kann nur auf dem Server fest programmiert werden?

Antwort

0

Es gab ein Konzept Missverständnis hier. Die einfache Lösung besteht darin, zu überprüfen, ob die API-Schlüssel geladen sind, und dann den abhängigen Code auszuführen. Auf diese Weise wird die App nicht abstürzen.

1

Verwenden Sie den Rückruf, um Ihren Code synchron zu machen.

versuchen, etwas wie unten, die Ihr Problem lösen können: -

Meteor.methods({ 
'getApiKey': function() { 
    return Settings.findOne().key //there is only one entry so far 
} }); 

// 
function setKey(callback) 
{ 
    Meteor.call('getApiKey', function (err, result) { 
    if (err) console.log(err); 

     Session.set('key', result); 
     callback(err); 
    }); 
} 

//Wait for the `getApiKey` to complete, use callback. 
setKey(function(err) 
{ 
    var apiKey = Session.get('key'); //Set the key in the callback function 
}) 

EDIT: -

diese stattdessen versuchen: -

Meteor.methods({ 
'getApiKey': function() { 
    return Settings.findOne().key //there is only one entry so far 
} }); 

    var apiKey; 
    Meteor.call('getApiKey', function (err, result) { 
    if (err) console.log(err); 

     Session.set('key', result); 
     apiKey = Session.get('key'); 
     console.log(apiKey); 
    }); 

Lassen Sie mich wissen, ob es funktioniert.

+0

Scheint wie es tat. Aber ich verstehe den Code nicht vollständig. Ich bin mir auch nicht sicher, wie man apiKey außerhalb von setKey() benutzt. Stattdessen setze ich meinen Code, der apiKey in setKey() verwendet, aber das scheint nicht der richtige Weg zu sein. Könnten Sie bitte erklären? – henk

+0

Ich habe meine Antwort mit einer weiteren Möglichkeit bearbeitet, was du willst. Lass mich wissen, ob es funktioniert oder nicht und ob es dir gut geht, wenn es dir so geht? – Shrabanee

+0

Im Falle einer Bearbeitung wird der apiKey nur innerhalb des Aufrufs definiert. Außerhalb der Meteor.call hat es keinen Wert. Das funktioniert nicht. – henk