2015-06-20 15 views
16

Ich versuche derzeit, eine serverseitige Verbindung mit iCloud Server mit dem neuen CloudKit JS von Apple herzustellen. Gemäß der WWDC 2015 "CloudKit JS und Web Service", da CloudKit JS ein reines JS-Framework ist, können Sie es in allen JS-Umgebungen wie Knoten JS verwenden.Cloudkit JS && Knoten JS

Ich habe den Quellcode von CloudKit JS von https://cdn.apple-cloudkit.com/ck/1/cloudkit.js kopiert und in eine Datei namens "cloudkit.js" eingefügt. Hier ist eine Demo von dem, was ich ausprobiert habe:

CloudKit scheint korrekt eingerichtet zu sein, da alle Funktionen korrekt aufgerufen werden. Der Aufruf von performQuery wird jedoch nie aufgerufen. Warum ?

Gibt es jemanden, der CloudKit JS bereits in einer Serverumgebung konfigurieren kann?

Vielen Dank im Voraus

Antwort

16

im Browser setzt CloudKit.js auf XmlHttpRequest, um die Ressourcen zu holen, aber da Wolkenjunge keine npm Modul ist es eine Art und Weise muß die Dinge von Ihrem Server abzurufen.

npm install node-fetch

Mit Knoten holen, hier ist ein gezwickt Version des Codes, die die resultierenden Artikel im Abfrage protokolliert:

var fetch = require('node-fetch'); 
var CloudKit = require("./cloudkit.js") 

CloudKit.configure({ 
    services: { 
    fetch: fetch 
    }, 
    containers: [{ 
    containerIdentifier: 'yourContainerIdentifier', 
    apiToken: 'yourAPItoken', 
    environment: 'development' 
    }] 
}) 

var container = CloudKit.getDefaultContainer(); 
var publicDB = container.publicCloudDatabase; 

function demoPerformQuery() { 
    publicDB.performQuery({recordType: 'Items'}).then(function(response){ 
    console.log(response) 
    }).catch(function(error){ 
    console.log(error) 
    }) 
} 

var express = require('express') 
var app = express() 

app.get("/", function() { 
    demoPerformQuery() 
}) 

var server = app.listen(8080, function() { 
    console.log("Server listen") 
}) 

Nach http://localhost:8080 Schlagen Sie Ihren Server, um die Antwort einzuloggen sehen sollte Ihre Anfrage.

+0

Vielen Dank für Ihre Antwort. Ich habe einen Fehler erhalten: "Eingebettete Versprechen fehlen, setzen Sie Fetch.Promise auf Ihre bevorzugte Alternative". Hat diese Methode für Sie funktioniert? –

+2

Promises waren ab Version 0.11 im Knoten verfügbar (die aktuelle Version ist 0.12). Sie können Knoten aktualisieren oder etwas wie https://github.com/jakearchibald/es6-promise als Backfill verwenden. –

+1

Funktioniert wie ein Charme! Vielen Dank. –