Cloudkit JS && Node JS

Gaé*_*anZ 20 javascript node.js ios cloudkit cloudkit-web-services

我目前正在尝试使用Apple的新CloudKit JS执行与iCloud Server的服务器端连接.根据WWDC 2015"CloudKit JS和Web服务",由于CloudKit JS是一个纯JS框架,因此您可以在所有JS环境中使用它,例如节点JS.

我从https://cdn.apple-apple-coudkit.com/ck/1/cloudkit.js复制了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")
})
Run Code Online (Sandbox Code Playgroud)

由于正确调用了所有函数,因此CloudKit似乎已正确设置.但是从不调用performQuery的回调.为什么?

是否有人已经成功在服务器环境中配置CloudKit JS?

提前致谢

Dav*_*ing 19

在浏览器中,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")
})
Run Code Online (Sandbox Code Playgroud)

点击http:// localhost:8080后,您应该看到您的服务器记录对您的查询的响应.

  • 从版本0.11开始,节点可用于提供(当前版本为0.12).您可以升级节点或使用https://github.com/jakearchibald/es6-promise之类的回填. (2认同)