2012-05-04 8 views
12

बस डार्ट के साथ झुकाव शुरू कर दिया और मैंने एक सरल एचटीपी सर्वर और एक ग्राहक लिखने का फैसला किया। मेरे सर्वर कोड:डार्ट के साथ सीओआरएस, मैं इसे काम करने के लिए कैसे प्राप्त करूं?

#import("dart:io"); 

final HOST = "127.0.0.1"; 
final PORT = 8080; 
final LOG_REQUESTS = true; 

void main() { 
    HttpServer server = new HttpServer(); 
    server.addRequestHandler((HttpRequest request) => true, requestReceivedHandler); 
    server.listen(HOST, PORT); 
    print("Server is running on ${PORT}."); 
} 

void requestReceivedHandler(HttpRequest request, HttpResponse response) { 
    var pathname = request.uri; 
    var apiresponse=""; 
    if (LOG_REQUESTS) { 
    print("Request: ${request.method} ${pathname}"); 
    } 
    if(pathname == '/api'){ 
    response.headers.set(HttpHeaders.CONTENT_TYPE, "text/plain; charset=UTF-8"); 
    response.headers.add("Access-Control-Allow-Methods", "POST, OPTIONS, GET"); 
    response.headers.add("Access-Control-Allow-Origin", "*"); 
    response.headers.add('Access-Control-Allow-Headers', '*'); 
    print('welcome to the good life'); 
    response.outputStream.writeString("API Call"); 
    response.outputStream.close(); 
    } 
} 

मेरे क्लाइंट कोड:

#import('dart:html'); 
#import('dart:json'); 

class dartjson { 

    dartjson() { 
    } 

    void run() { 
    write("Hello World!"); 
    } 




    void fetchFeed(){ 
    XMLHttpRequest xhr = new XMLHttpRequest(); 
    var url = "http://127.0.0.1:8080/api"; 
    xhr.open("GET", url, true); 
    xhr.setRequestHeader('Content-Type', 'text/plain'); 
    //xhr.setRequestHeader('Access-Control-Request-Headers', 'http://127.0.0.1:3030'); 
    xhr.send(); 
    print(xhr.responseText); 
    document.query('#status').innerHTML = xhr.responseText; 

    } 



void main() { 
    new dartjson().fetchFeed(); 
} 

मैं त्रुटि प्राप्त हो रही:

XMLHttpRequest cannot load http://127.0.0.1:8080/api. Origin 
http://127.0.0.1:3030 is not allowed by Access-Control-Allow-Origin. 

क्या मुझे लगता है मैं गलत कर रहा हूँ?

+1

क्या आपने उन 2 लिंक को देखा है? http://blog.sethladd.com/2012/03/jsonp-with-dart.html https://groups.google.com/a/dartlang.org/group/misc/browse_thread/thread/e93a2b0e205bd5d1/605a7ef152f96e7b?lnk = जीएसटी और क्यू = सीओआरएस # 605a7ef152f96e7b – Gero

+0

'*' पहुंच-नियंत्रण-अनुमति-उत्पत्ति 'को छोड़कर किसी भी चीज़ के लिए मान्य मान नहीं है; और यदि अनुरोध प्रीफलाइट किया गया है तो यह मूल फ़ील्ड के लिए भी मान्य नहीं है (यदि आप 'एक्सेस-कंट्रोल-अनुरोध-हेडर' लाइन को अनमोल करते हैं तो यह मामला है - हालांकि यह अधिक समझ में नहीं आता है, मान एक सूची होना चाहिए हेडर नाम)। – Tgr

+0

मुझे सीओआरएस ने 'एक्सेस-कंट्रोल-ऑब्जेक्ट-ओरिजिन' संपत्ति के साथ काम करने के तरीके के साथ काम किया है। अन्य मूल्यों को सही करें और इसे ठीक काम करना चाहिए। – enyo

उत्तर

4

आप अपने जीवन को सरल बना सकते हैं और उसी होस्ट से सर्वर/क्लाइंट स्क्रिप्ट दोनों चला सकते हैं: पोर्ट पता। http://www.dartlang.org/articles/io/#web-servers पर एक छोटा वेबसर्वर उदाहरण है जो स्थैतिक फ़ाइलों को भी प्रदान करता है। अपना '/ एपीआई' हैंडलर जोड़ें और सुनिश्चित करें कि आपकी क्लाइंट फाइलें एक ही निर्देशिका में हैं। उदाहरण सर्वर डार्ट संपादक बिल्टिन सर्वर से बहुत धीमा है जो पोर्ट 3030 पर चलता है।

6

एक ही समस्या का सामना कर रहा था। नीचे मेरा सर्वर कोड है। यह सिर्फ क्वेरी पैरामीटर प्रिंट करता है। समस्या को ठीक करने के लिए एक्सेस कंट्रोल हेडर जोड़ा गया।

HttpServer.bind('127.0.0.1', 8080).then((server){ 
    server.listen((HttpRequest request){  
     request.uri.queryParameters.forEach((param,val){ 
     print(param + '-' + val); 
     }); 

     request.response.headers.add("Access-Control-Allow-Origin", "*"); 
     request.response.headers.add("Access-Control-Allow-Methods", "POST,GET,DELETE,PUT,OPTIONS"); 

     request.response.statusCode = HttpStatus.OK; 
     request.response.write("Success!"); 
     request.response.close(); 
    }); 
    }); 

उम्मीद है कि इससे मदद मिलती है।