Cloudkit JS && Node JS

В настоящее время я пытаюсь выполнить подключение на стороне сервера к iCloud Server, используя новый CloudKit JS от Apple. Согласно WWDC 2015 "CloudKit JS и веб-сервис", поскольку CloudKit JS является чистой структурой JS, вы можете использовать ее во всех средах JS, таких как node JS.

Я скопировал исходный код CloudKit JS из https://cdn.apple-cloudkit.com/ck/1/cloudkit.js и вставил его в файл с именем "cloudkit.js". Вот демонстрация того, что я пробовал:

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, похоже, правильно настроен, так как все функции правильно вызваны. Но обратный вызов executeQuery никогда не вызывается. Зачем?

Есть ли кто-то, кто уже успел настроить CloudKit JS в среде сервера?

Заранее спасибо

Ответы

Ответ 1

В браузере CloudKit.js полагается на XmlHttpRequest для извлечения ресурсов, но поскольку CloudKit не является модулем npm, вам понадобится способ извлечения данных с вашего сервера.

npm install node-fetch

Используя node -fetch, вот уточненная версия вашего кода, которая регистрирует результирующие элементы в вашем запросе:

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

После нажатия http://localhost:8080 вы должны увидеть, как ваш сервер регистрирует ответ на ваш запрос.