【问题标题】:I want to show data from mysql database on browser using dart我想使用 dart 在浏览器上显示来自 mysql 数据库的数据
【发布时间】:2016-05-09 07:47:29
【问题描述】:

我正在做一个学校项目,它需要在浏览器中显示一些来自 mysql 数据库的简单数据。我读过,SQLJocky 不能在浏览器中工作,所以我决定让它像服务器客户端应用程序并在服务器端运行 db(从这里获得灵感:https://dart-lang.github.io/server/codelab/)。但它没有用,无法创建带有消息的客户端 api:

*in ShutdownIsolate: Unhandled exception:
IsolateSpawnException: Unable to spawn isolate: Unhandled exception:
Load Error for "package:sqljocky/sqljocky.dart": No mapping for 'sqljocky' package when resolving 'package:sqljocky/sqljocky.dart'.
#0      _asyncLoadErrorCallback (dart:_builtin:155)
#1      _asyncLoadError (dart:_builtin:566)
#2      _loadPackage (dart:_builtin:605)
#3      _loadData (dart:_builtin:637)
#4      _loadDataAsync (dart:_builtin:657)
#5      _loadScriptCallback (dart:_builtin:153)
#6      _handleLoaderReply (dart:_builtin:370)
#7      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:148)
'file:///home/alenka/dart-pokusy/server-side-app/one-hour-codelab/server/7-serve/lib/server/dbConnector.dart': error: line 1 pos 1: library handler failed
import 'package:sqljocky/sqljocky.dart';
^
#0      Isolate.spawnUri.<spawnUri_async_body> (dart:isolate-patch/isolate_patch.dart)
#1      _asyncErrorWrapperHelper.<anonymous closure> (dart:async-patch/async_patch.dart:34)
#2      _RootZone.runBinary (dart:async/zone.dart:1154)
#3      _Future._propagateToListeners.handleError (dart:async/future_impl.dart:579)
#4      _Future._propagateToListeners (dart:async/future_impl.dart:641)
#5      _Future._completeError (dart:async/future_impl.dart:432)
#6      _SyncCompleter._completeError (dart:async/future_impl.dart:56)
#7      _Completer.completeError (dart:async/future_impl.dart:27)
#8      Isolate._spawnCommon.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:439)
#9      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:148)*

有谁知道如何解决这个问题,或者如何在浏览器中以不同的方式从数据库中获取数据?

添加的代码包含来自 SQLJocky 的内容:

`import 'package:sqljocky/sqljocky.dart';
 import 'dart:async';
...
  @ApiMethod(path: 'connect')
  Future<List<String>> dbConnect() async {
    List<String> rows = [];
    print('called dbConnect');
    var pool = new ConnectionPool(
        host: 'localhost',
        port: 3306,
        user: "root",
        password: null,
        db: 'project',
        max: 5);
    print('connection created');
    var results = await pool.query('select * from User');
    print('gonna write something from db');
    results.forEach( (row){
      print('Name: ${row[0]}, password: ${row[1]}');
      rows.add('Name: ${row[0]}, password: ${row[1]}');
    });
    return rows;
  }
`

【问题讨论】:

  • 您能否提供更多代码来说明您如何使用sqljocky?浏览器不能直接访问数据库,除非数据库提供一些 REST API,但是当数据库允许从 Web 直接访问时,这通常是一个安全问题。
  • 在上述页面的代码中,我已将此函数添加到文件 /lib/server/piratesapi.dart 此函数:@ApiMethod(path: 'connect') Future> dbConnect() async { List rows = []; var pool = new ConnectionPool(host: 'localhost', port: 3306, user: "root", password: null, db: 'project', max: 5); var results = await pool.query('select * from User'); results.forEach( (row){ print('Name: ${row[0]}, password: ${row[1]}'); rows.add('Name: ${row[0]}, password: ${row[1]}'); });返回行;并在第 5 步遇到问题
  • 我还使用了命令 pub get、dartanalyzer lib/server/piratesapi.dart 和 dart bin/piratesnest.dart 没有任何问题,在最后一个命令之后,浏览器上能够调用 localhost:8088/piratesApi/v1/connect 执行该命令功能。它已将正确的行打印到控制台。
  • 听起来像是有bug的版本。当前稳定版是 1.15.x。能否请您更新并重试?
  • 还是谢谢你 :) 至少它没有以那个错误结束,更新有帮助。

标签: dart dart-isolates sqljocky


【解决方案1】:

将您的服务器端代码和客户端代码隔离到具有自己的 pubspec.yaml 的单独项目中。

我发现当某些客户端库都在 pubspec.yaml 中时,sqljocky 不能很好地配合它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-31
    • 2015-09-24
    • 2023-03-13
    • 2012-06-11
    相关资源
    最近更新 更多