2015-06-20 17 views
16

मैं वर्तमान में ऐप्पल से नए क्लाउडकिट जेएस का उपयोग कर iCloud सर्वर से सर्वर साइड कनेक्शन करने की कोशिश कर रहा हूं। डब्ल्यूडब्ल्यूडीसी 2015 "क्लाउडकिट जेएस और वेब सेवा" के मुताबिक, क्लाउडकिट जेएस एक शुद्ध जेएस ढांचा है, इसलिए आप इसे सभी जेएस वातावरण जैसे नोड जेएस में उपयोग कर सकते हैं।क्लाउडकिट जेएस एंड नोड जेएस

मैंने क्लाउडकिट जेएस के स्रोत कोड को 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") 
}) 

क्लाउडकिट सही ढंग से स्थापित होने लगते हैं क्योंकि सभी कार्यों को सही ढंग से बुलाया जाता है। लेकिन PerformQuery के कॉलबैक कभी नहीं कहा जाता है। क्यूं कर ?

क्या कोई ऐसा व्यक्ति है जो क्लाउडकिट जेएस को सर्वर वातावरण में कॉन्फ़िगर करने में सफल रहा है?

अग्रिम

उत्तर

16

ब्राउज़र में धन्यवाद, CloudKit.js आदेश संसाधनों को लाने के लिए XmlHttpRequest पर निर्भर करता है, लेकिन जब से CloudKit एक NPM मॉड्यूल नहीं है आप अपने सर्वर से बातें लाने के लिए एक तरह से की आवश्यकता होगी।

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 मारने के बाद आप अपने सर्वर के जवाब लॉग ऑन देखना चाहिए:

npm install node-fetch

नोड लाने की सहायता से देखें कि आपकी क्वेरी में जिसके परिणामस्वरूप आइटम लॉग अपने कोड का एक बदलाव किया संस्करण है तुम्हारे सवाल।

+0

आपकी प्रतिक्रिया के लिए धन्यवाद। मुझे एक त्रुटि मिली: "मूल वादा गायब, सेट लाओ। अपने पसंदीदा विकल्प से समझौता करें"। क्या यह विधि आपके लिए काम करती है? –

+2

संस्करण 0.11 के रूप में नोड में वादे उपलब्ध थे (वर्तमान संस्करण 0.12 है)। आप नोड को अपग्रेड कर सकते हैं या बैकफिल के रूप में https://github.com/jakearchibald/es6-promise जैसे कुछ का उपयोग कर सकते हैं। –

+1

एक आकर्षण की तरह काम करता है! आपका बहुत बहुत धन्यवाद। –