2015-06-20 14 views
16

Obecnie próbuję wykonać połączenie po stronie serwera z serwerem iCloud za pomocą nowego CloudKit JS od Apple. Według WWDC 2015 "CloudKit JS and Web Service", ponieważ CloudKit JS jest czystym szkieletem JS, można go używać we wszystkich środowiskach JS, takich jak węzeł JS.Cloudkit JS && Node JS

Skopiowałem kod źródłowy CloudKit JS z https://cdn.apple-cloudkit.com/ck/1/cloudkit.js i wkleiłem go do pliku o nazwie "cloudkit.js". Oto prezentacja tego, co próbowałem:

var CloudKit = require("/some/folders/cloudkit.js") 

function demoPerformQuery() { 
    CloudKit.configure({ 
     containers: [{ 
    containerIdentifier: 'myContainerIdentifier', 
    apiToken: 'myAPIToken', 
    environment: 'development' 
     }] 
    }) 

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

    publicDB.performQuery({recordType: 'Items'}).then(function(response){ 
    // never called :-(
    }) 
} 

var express = require('express') 

var app = express() 

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

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

Wygląda na to, że CloudKit jest poprawnie skonfigurowany, ponieważ wszystkie funkcje są poprawnie wywoływane. Ale wywołanie funkcji performQuery nigdy nie jest wywoływane. Czemu ?

Czy jest ktoś, kto już skonfigurował CloudKit JS w środowisku serwerowym?

góry dzięki

Odpowiedz

16

w przeglądarce, CloudKit.js polega na XmlHttpRequest w celu pobierania zasobów, ale od CloudKit nie jest modułem npm musisz sposób, aby pobrać rzeczy z serwera.

npm install node-fetch

Korzystanie węzła pobrać tutaj jest manipulowane wersja kodu, który rejestruje wynikające Produkty w zapytaniu:

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") 
}) 

Po uderzeniu http://localhost:8080 powinieneś zobaczyć serwer logowania odpowiedź Twoje zapytanie.

+0

Dzięki za odpowiedź. Wystąpił błąd: "brak obietnicy, ustaw Fetch.Promise na swoją ulubioną alternatywę". Czy ta metoda działa dla ciebie? –

+2

Obietnice były dostępne w węźle od wersji 0.11 (aktualna wersja to 0.12). Możesz uaktualnić węzeł lub użyć czegoś takiego jak https://github.com/jakearchibald/es6-promise jako backfill. –

+1

Działa jak urok! Dziękuję Ci bardzo. –

Powiązane problemy