2015-10-21 2 views
2

Я пытаюсь запросить OrientDB в веб-клиенте Dart и, кажется, отправляет пустой ответ. Вот мой main.dart:Dart Пустой ответ, отправленный клиентом HttpRequest

import 'dart:html'; 
// import 'dart:async'; 
import 'dart:convert'; 

main() { 
// querySelector('#output').text = 'Your Dart app is running.'; 
    HttpRequest.request("http://localhost:2480/listDatabases", 
     method: 'GET', requestHeaders: 
      {'Access-Contol-Allow-Origin': '*'}) 
    .then((req) => req.onReadyStateChange.where((e) => 
     req.readyState == HttpRequest.DONE).first 
    .then((e) { 
    var resp = req.responseText; 
    querySelector('#output').text = "${req.status}"; 
    Map json = JSON.decode(resp); 
    var ul = querySelector('#dblist'); 
    for (var db in json['databases']) { 
     var li = new LIElement(); 
     li.appendText(db); 
     ul.append(li); 
    } 
    })); 
} 

и вот мой index.html:

<!DOCTYPE html> 

<!-- 
    Copyright (c) 2015, <your name>. All rights reserved. Use of this source code 
    is governed by a BSD-style license that can be found in the LICENSE file. 
--> 

<html> 
<head> 
    <meta charset="utf-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <meta name="scaffolded-by" content="https://github.com/google/stagehand"> 
    <title>WebDbList1</title> 
    <link rel="stylesheet" href="styles.css"> 
    <script async src="main.dart" type="application/dart"></script> 
    <script async src="packages/browser/dart.js"></script> 
</head> 

<body> 

    <div id="output"></div> 
    <ul id="dblist"> 

    </ul> 

</body> 
</html> 

Если есть какие-либо вопросы о OrientDB специфичного кода, следующий успешно извлекает список баз данных .. .

import 'dart:io'; 
import 'dart:async'; 
import 'dart:convert'; 

const String database = "dosdart1"; 

main(List<String> args) async { 
    List dblist = new List(); 
    String firstName, lastName; 
    print("First name?"); 
    firstName = stdin.readLineSync(); 
    print("Last name?"); 
    lastName = stdin.readLineSync(); 
    print("You entered $firstName $lastName"); 
    dblist = await ListDatabases(); 
    print("received $dblist"); 

    // send GET http://localhost:2480/listDatabases 
    /* 
    HttpClient client = new HttpClient(); 
    client.getUrl(Uri.parse("http://localhost:2480/listDatabases")) 
    .then((HttpClientRequest request) { 
    return request.close(); 
    }).then((HttpClientResponse response) { 
    response.transform(UTF8.decoder).listen((contents) { 
     print("$contents"); 
     Map json = JSON.decode(contents); 
     List dblist = json["databases"]; 
     if (dblist.contains("dosdart1")) { 
     print("database exists"); 
     } else { 
     print("Creating database..."); 

     } 
     print("Found $dblist"); 

    }); 
    }); 
    */ 
} 

Future<List> ListDatabases() { 
    var completer = new Completer(); 
    List dblist = new List(); 

    HttpClient client = new HttpClient(); 
    client.getUrl(Uri.parse("http://localhost:2480/listDatabases")) 
    .then((HttpClientRequest request) { 
    return request.close(); 
    }).then((HttpClientResponse response) { 
    response.transform(UTF8.decoder).listen((contents) { 
     // print("$contents"); 
     Map json = JSON.decode(contents); 
     print("$json"); 
     for (var db in json['databases']) { 
     dblist.add(db); 
     print("$db"); 
     } 
    // print("$dblist"); 
     completer.complete(dblist); 
    }); 
    }); 
    return completer.future; 


} 

То, что я пытаюсь сделать, это получить список существующих баз данных из OreintDB и отображать его на своем браузере. Я могу достичь этой цели в этом приложении командной строки, но я продолжаю терпеть неудачу в веб-клиенте. Какие-либо предложения? Мой код компилируется ОК, но все, что я получаю, это пустая веб-страница на Dartium.

+0

Если вы указали этот URL-адрес http: // localhost: 2480/listDatabases непосредственно в URL-адрес браузера, вы получите ожидаемый ответ? –

+1

Интересно, почему вы устанавливаете заголовок «Access-Contol-Allow-Origin» на стороне клиента, вы должны установить его на стороне сервера. Может быть, вы столкнулись с одной и той же политикой происхождения? – Fox32

+0

Я ошибся «контроль» в заголовке, но исправление этой опечатки не устранило проблему. В этом случае нет «сервера», кроме сервера базы данных OrientDB. Ввод «localhost: 2480/listDatabases» в браузере дает желаемые результаты. Я пытаюсь использовать интерфейс REST OrientDB. –

ответ

0

Я реализовал конфигурации XML затруднительное я был дан, изменил мой Div тег ул, и следующий Dart дал мне список базы данных OrientDB

import 'dart:html'; 
import 'dart:convert'; 

void main() { 
    var root = querySelector('#output') as UListElement; 
    HttpRequest.getString("http://localhost:2480/listDatabases").then((content) { 
    var raw = JSON.decode(content); 
    List databases = raw['databases']; 
    for (String database in databases) { 
     var li = new LIElement(); 
     li.appendText(database); 
     root.append(li); 
    } 
    }); 
} 

Я вставленный следующее в Orient-сервер-config.xml как мне было сказано:

<parameter value="Access-Control-Allow-Origin: http://localhost:63342;Access-Control-Allow-Credentials: true;Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Origin;Access-Control-Allow-Methods: POST, GET, OPTION" name="network.http.additionalResponseHeaders"/> 
+0

@ Fox32 Приношу свои извинения!Я понял, как настроить OrientDB, как вы сказали, и мой код дает ответ {"@type": "d", "@ version": 0, "databases": ["GratefulDeadConcerts"], "@ fieldTypes" : "databases = e"} Мой новый Dart код: import 'dart: html'; main() async { // querySelector ('# output'). Text = 'Приложение Dart запущено.'; var request = await HttpRequest.request ('http: // localhost: 2480/listDatabases', mimeType: "application/json"); querySelector ('# output'). Text = request.responseText; } и мой новый конфигурационный XML является –

+0

Мой новый XML является ' <имя параметра = "network.http.additionalResponseHeaders" значение =" Access-Control-Allow-Origin: HTTP: // локальный: 63342; Доступ -Control-Allow-Credentials: true; Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Origin; Access-Control-Allow-Methods: POST, GET, OPTION "/> \t \t <параметр значение = "utf-8" name = "network.http.charset" /> <значение параметра = "true" name = "network.http.jsonResponseError" /> ' –

+0

После вышеупомянутого хакерства конфигурации следующие Код Dart получил ожидаемые результаты: 'import 'dart: html'; import 'dart: convert'; void main() { var root = querySelector ('# output') как UListElement; HttpRequest.getString ("http: // localhost: 2480/listDatabases") .then ((content) { var raw = JSON.decode (content); Список баз данных = raw ['databases']; ... ' –

Смежные вопросы