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/ вы должны увидеть, как ваш сервер регистрирует ответ на ваш запрос.