javascript ios node.js cloudkit cloudkit-web-services

javascript - Cloudkit JS && Node JS



ios node.js (1)

Actualmente estoy intentando realizar una conexión del lado del servidor a iCloud Server usando el nuevo CloudKit JS de Apple. De acuerdo con WWDC 2015 "CloudKit JS y Web Service", dado que CloudKit JS es un marco de JS puro, puede usarlo en todos los entornos de JS, como el nodo JS.

Copié el código fuente de CloudKit JS de https://cdn.apple-cloudkit.com/ck/1/cloudkit.js y lo pegué en un archivo llamado "cloudkit.js". Aquí hay una demostración de lo que probé:

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

CloudKit parece estar configurado correctamente ya que todas las funciones se llaman correctamente. Pero la devolución de llamada de performQuery nunca se llama. Por qué ?

¿Hay alguien que ya haya logrado configurar CloudKit JS en un entorno de servidor?

Gracias por adelantado


En el navegador, CloudKit.js confía en XmlHttpRequest para obtener recursos, pero como CloudKit no es un módulo npm, necesitará una forma de obtener cosas de su servidor.

npm install node-fetch

Mediante el uso de node-fetch, aquí hay una versión modificada de su código que registra los elementos resultantes en su consulta:

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

Después de pulsar http: // localhost: 8080 , debería ver que su servidor registra la respuesta a su consulta.