Dart-Aqueduct框架开发(三)

上一篇

声明:本文首发于微信订阅号:Dart客栈,微信后台回复05163获取本篇源码
文章为原创,如需转载请注明出处,并告知作者,谢谢!

简介

这篇文章将学习如何设置配置文件,连接PostgreSQL数据库

1. 添加配置文件

我们可以在main.dart中找到option.configurationFilePath,它的值对应为配置文件的路径,默认以项目为根路径

import 'package:demo/demo.dart';

Future main() async {
  final app = Application<DemoChannel>()
//watch
      ..options.configurationFilePath = "config.yaml"//载入配置文件
//watch
      ..options.port = 8888;//端口号

  final count = Platform.numberOfProcessors ~/ 2;//启动的isolate数量
  await app.start(numberOfInstances: count > 0 ? count : 1);//应用启动

  print("Application started on port: ${app.options.port}.");
  print("Use Ctrl-C (SIGINT) to stop running the application.");
}

可以看到配置文件为项目文件夹下面的config.yaml

image.png

可以看到当前还没有相关的配置信息,所以我们可以添加下面的配置

port: 8080

把我们的端口号设置为 8080,然后在lib文件夹下面新建一个AppConfig类,代码如下:

import 'demo.dart';

class AppConfig extends Configuration{

  AppConfig(String path):super.fromFile(File(path));

  int port;

}

channel.dart文件下添加你的配置实例,即可应用到项目中,代码如下

class DemoChannel extends ApplicationChannel {
  @override
  Future prepare() async {
//new
    final AppConfig _config=AppConfig(options.configurationFilePath);
    options.port=_config.port;
//new
  }
}

然后启动你的服务器即可

image.png

这里有个bug,就是打印的Port: 8888这个是错的,我们的端口已经更改为8080,所以已经访问不了8888端口,我们请求一下上一节的接口,把端口改为8080,http://localhost:8080/hello
image.png

可看到我们成功的访问

2.PostgreSQL数据库

很多小伙伴们比较少用到这个PostgreSQL这个数据库,一般用的SQL ServerMy SQL等等,小编当年读大学的时候也学的是SQL Server,那么为什么要使用PostgreSQL这个数据库呢

PostgreSQL介绍

PostgreSQl安装

打开官网https://www.postgresql.org/
点击Download,找到你系统对应的版本,我对应的是macos

image.png

然后点击Download the installer即可
image.png

然后进入下载
image.png

当然,你也可以使用brew工具进行安装,输入下面命令即可:

brew install postgresql

安装成功后,可以到/usr/local/var/postgres这个路径查看

PostgreSQl初始化

  • 查看当前版本pg_ctl -V
rhymes-MacBook-Air:~ rhyme$ pg_ctl -V
pg_ctl (PostgreSQL) 11.5
  • 启动服务brew services start postgresql
rhymes-MacBook-Air:~ rhyme$ brew services start postgresql
==> Successfully started `postgresql` (label: homebrew.mxcl.postgresql)
  • 卸载PostgreSqlbrew uninstall postgres
  • 添加用户createuser --interactive
rhymes-MacBook-Air:~ rhyme$ createuser --interactive
Enter name of role to add: rhymelph
Shall the new role be a superuser? (y/n) y
  • 修改密码
rhymes-MacBook-Air:~ rhyme$ psql postgres
psql (11.5)
Type "help" for help.
postgres=# \password rhymelph
Enter new password: 
Enter it again: 

使用数据库可视化工具Navicat Premium

  • 新建一个连接


    image.png
  • 新建数据库


    image.png

好了,我们已经有了账号,密码,数据库了,下面我们来把项目连接上数据库

3.项目连接数据库

  • config.yaml文件下添加
database:
  host: localhost
  port: 5432
  databaseName: "my_data"
  username: "rhymelph"
  password: "123456"
  • app_config.dart文件下添加下面代码
import 'demo.dart';

class AppConfig extends Configuration{
  AppConfig(String path):super.fromFile(File(path));
  int port;
//new
  DatabaseConfiguration database;
//new
}
  • channel.dart文件夹下生成实例
class DemoChannel extends ApplicationChannel {
  ManagedContext context;//可通过该实例操作数据库

  @override
  Future prepare() async {
    //执行初始化任务的方法
    final AppConfig _config = AppConfig(options.configurationFilePath);
    options.port = _config.port;
//new
    final dataModel = ManagedDataModel.fromCurrentMirrorSystem();//描述应用程序的数据模型
    final psc = PostgreSQLPersistentStore.fromConnectionInfo(
        _config.database.username,
        _config.database.password,
        _config.database.host,
        _config.database.port,
        _config.database.databaseName);//管理与单个数据库的连接
    context=ManagedContext(dataModel, psc);
//new
  }
}

到此,我们已经可以使用数据库了,但Aqueduct为我们准备了实体类映射到表的功能

4.将实体类映射到表

  • 运行命令aqueduct db generate 初始化迁移文件,运行后,会在项目下生成一个版本迁移文件
    image.png
  • 运行命令aqueduct db upgrade --connect postgres://rhymelph:123456@localhost:5432/my_data将版本迁移文件同步到你的数据库
  • 你也可以在项目根目录下新建一个database.yaml文件,然后存放数据库信息,下次只要运行aqueduct db upgrade即可
username: "rhymelph"
password: "123456"
host: "localhost"
port: 5432
databaseName: "my_data"
  • 新建一个Article类,添加下面内容
import '../demo.dart';

class Article extends ManagedObject<_Article> implements _Article {}

class _Article {
  @primaryKey//作为主键 == @
  int id;

  String content;//内容

  @Column(indexed: true)//添加索引
  DateTime createData;
}

然后使用aqueduct db generateaqueduct db upgrade即可将实体类字段同步到数据库中(这里需要注意,这个实体类必须导入到channel.dart文件中才有效)

aqueduct db generate.png

aqueduct db upgrade.png

可以看到我们成功的执行了根据实体类在数据库生成对应的表,如果小伙伴也执行成功,会看到下面的两张表
image.png

一张表_article为我们要生成的表,另一张为Aqueduct框架记录版本号使用的,为自动生成,我们暂时不用管

5.使用接口查询数据库

接下来我们在表中添加一条数据,然后添加下面代码到channel.dart

  @override
  Controller get entryPoint {
    //定义路由、请求链接等,在启动期间调用
    //...
//new
    router.route('/queryAllArticle').linkFunction((request) async{
      final query = Query<Article>(context);//拿到表的查询实例
      final List<Article> articles=await query.fetch();//查询所有数据
      return Response.ok(articles);//数据以json形式返回给客户端
    });
//new
    return router;
  }

可以看到,Aqueduct使用ORM对象关系映射,免去了使用SQL语句的麻烦,十分便捷,然后我们启动服务器,访问接口http://localhost:8080/queryAllArticle

image.png

当看到请求成功,并显示我们在存储在数据库中的数据时,👏恭喜你,成功的使用接口查询数据库!,这一节的学习就到这里了,希望帮忙转发,让更多的小伙伴学习到这个语言和框架

下一篇

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容