Cloudkit JS && Node JS

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

我从https://cdn.apple-cloudkit.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") }) 

因为所有的function都被正确调用,CloudKit似乎已经正确设置了。 但performQuery的callback从来没有被调用过。 为什么?

有人已经成功在服务器环境中configurationCloudKit JS吗?

提前致谢

在浏览器中,CloudKit.js依赖于XmlHttpRequest来获取资源,但由于CloudKit不是npm模块,因此需要从服务器获取东西。

npm install node-fetch

使用节点获取,这里是你的代码的一个调整版本,logging在你的查询结果项目:

 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后,你应该看到你的服务器logging你的查询的响应。