javascript - Cloudkit JS && Node JS

标签 javascript ios node.js cloudkit cloudkit-web-services

我目前正在尝试使用 Apple 的新 CloudKit JS 执行与 iCloud 服务器的服务器端连接。根据 WWDC 2015“CloudKit JS 和 Web 服务”,由于 CloudKit JS 是一个纯 JS 框架,您可以在所有 JS 环境中使用它,例如 node 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")
})

CloudKit 似乎设置正确,因为所有函数都被正确调用。但是 performQuery 的回调永远不会被调用。为什么 ?

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

提前致谢

最佳答案

在浏览器中,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后您应该会看到您的服务器记录了对您的查询的响应。

关于javascript - Cloudkit JS && Node JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30954472/

相关文章:

objective-c - 如何在设置动画时更改 UIView block 动画的速度(或持续时间)?

python - 从用 Node.js 编写的 AWS Lambda 函数调用 Python boto3 库

asp.net - 如何让 webpack 和 iis express 协同工作?

javascript - 正则表达式获取 HTML 中最后一个 </body> 标签

javascript - 如果 textarea 为空,则防止选中其他复选框

javascript - 防止 HTML 形式的 JS/CSS

ios - 在 iOS 上,有没有办法在使用 UIGraphicsBeginImageContextWithOptions 创建 ImageContext 后获取它的大小?

javascript - 在 JavaScript 中嵌入 HTML

javascript - 试图找到选定的单选按钮。怎么了?

ios - 为钢琴风格的 UI 元素添加辅助功能