Cloudkit JS && Node JS

В настоящее время я пытаюсь подключиться к серверу iCloud на стороне сервера с помощью нового CloudKit JS от Apple. В соответствии с WWDC 2015 "CloudKit JS и веб-сервис", поскольку CloudKit JS - это чистая среда JS, ее можно использовать во всех средах JS, таких как узел 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/ вы должны увидеть, как ваш сервер регистрирует ответ на ваш запрос.

Другие вопросы по тегам