首页 > 其他分享 >aqueduct经验

aqueduct经验

时间:2023-12-25 11:14:04浏览次数:21  
标签:经验 return name aqueduct class router async final

代码示例

import 'aqueduct/aqueduct.dart';

class MyAppChannel extends ApplicationChannel {
  @override
  Future prepare() async {
    // 初始化数据库连接等操作
  }

  @override
  Controller get entryPoint {
    final router = Router();

    // 1. 网站端口为6081
    router.route('/').linkFunction((request) async {
      return Response.ok('Hello, world!')
        ..contentType = ContentType.html;
    });

    // 2. 使用orm接口进行数据增删查改访问,过程要求通过非ID字段进行查找数据
    router.route('/items').link(() => ItemsController(context));

    // 3. 使用token进行权限验证
    router.route('/secure').link(() => SecureController());

    // 4. 接收前端上传的图片文件并保存
    router.route('/upload').link(() => UploadController());

    return router;
  }
}

class ItemsController extends ResourceController {
  final ManagedContext context;

  ItemsController(this.context);

  @Operation.get()
  Future<Response> getItems(@Bind.query('name') String name) async {
    final query = Query<Item>(context)
      ..where((item) => item.name).equalTo(name);

    final items = await query.fetch();

    // 5. 将数据库返回的false和true转化为可授权和不可授权后返回前端
    final transformedItems = items.map((item) {
      return {
        'name': item.name,
        'authorized': item.authorized ? '可授权' : '不可授权'
      };
    }).toList();

    // 6. 返回前端的数据中带有前端自己的访问ip
    final clientIP = request.connectionInfo.remoteAddress.address;

    return Response.ok(transformedItems)
      ..contentType = ContentType.json
      ..write(clientIP);
  }
}

class SecureController extends ResourceController {
  @Operation.get()
  Future<Response> getSecureData() async {
    // 验证token逻辑
    if (/* token验证通过 */) {
      return Response.ok('Secure Data');
    } else {
      return Response.forbidden();
    }
  }
}

class UploadController extends ResourceController {
  @Operation.post()
  Future<Response> uploadFile(@Bind.multipart('file') FileUpload file) async {
    // 保存上传的文件逻辑
    final savedFilePath = /* 保存文件的路径 */;
    return Response.ok('File uploaded: $savedFilePath');
  }
}

class Item extends ManagedObject<_Item> implements _Item {}

class _Item {
  @primaryKey
  int id;

  @Column(unique: true)
  String name;

  @Column(defaultValue: 'false')
  bool authorized;
}

Future main() async {
  final app = Application<MyAppChannel>()
    ..options.configurationFilePath = 'config.yaml';

  await app.start(numberOfInstances: 3);
}

 

标签:经验,return,name,aqueduct,class,router,async,final
From: https://www.cnblogs.com/pearlcity/p/17925696.html

相关文章

  • 实战经验分享:开发同城外卖跑腿小程序
    下文,小编将与大家一同探究同城外卖跑腿小程序的开发实战,包括但不限于技术选型、开发流程、用户体验等多个方面。 1.技术选型在同城外卖跑腿小程序的开发中,技术选型是至关重要的一环。对于前端,选择了使用Vue.js框架,其灵活性和生态系统的支持使得开发过程更加高效。 后端方面,采用了......
  • 为什么程序员会35岁失业?核心原因:一年工作经验用十年!
    前言分享一下身边朋友的亲身经历,也浅浅的安慰一下那些被优化之后,找不到工作的朋友的受伤的心灵,因为你不是一个人!!!(下面由第一人称描述这个故事)距离过年还有三个月了,在这个节骨眼上我失业了。在广州失业已经一个月了,压力大的睡不着,每天梦里都在不停的浏览招聘网站。今天到了一家公司去......
  • 武汉星起航:亚马逊实战经验引领者,推动全球化跨境贸易新潮流
    武汉星起航,一个以深耕亚马逊平台为核心策略的公司,以其丰富的实战运营经验和敏锐的市场洞察力,在跨境电商领域崭露头角。自2017年开始,武汉星起航便在亚马逊自营店铺的实践中不断探索和创新。他们积累了丰富的经验,通过精准的市场分析和独到的运营策略,为合作伙伴提供了有力的业务支持。......
  • 学习贯彻“枫桥经验”,积极践行央企担当!
    12月15日,由中国社会工作联合会主办的“学习贯彻中央‘枫桥经验’纪念大会精神推动社会工作高质量发展——‘枫桥经验’与社会工作交流会”在京召开。第十届全国人大常委会副委员长、中国关心下一代工作委员会主任顾秀莲,第十二届全国人大常委会副委员长、中国民主同盟中央委员会原......
  • 突发!13家中企被美列入“未经验证清单”,嘉立创、芯云智慧等公司在列
    12月19日消息,美国商务部工业与安全局(BIS)发布通告,公布了13家位于中国的企业名单,宣称它们被列入“未经验证清单”(UVL),该决定将于2023年12月19日正式生效。据百能云芯电子元器件商城了解,BIS在通告中详细列出了这些企业的名称和地址,其中包括两家隶属于富士康旗下的公司:富联精密电子(天津)......
  • 秦疆的Java课程笔记:79 异常 自定义异常及经验小结
    使用Java内置的异常类可以描述在编程时出现的大部分异常情况。除此之外,用户还可以自定义异常。(秦疆老师:用的不多,但开源框架或者大型系统会用到。)用户自定义异常类,只需要继承Exception类即可。自定义异常类的步骤:创建自定义异常类在方法中通过throw关键字抛出异常对象......
  • [排序,贪心,置换环]洛谷P1327&&P8637,双倍经验
    前置知识:置换环,最小交换次数https://blog.csdn.net/yunxiaoqinghe/article/details/113153795?ops_request_misc=&request_id=&biz_id=102&utm_term=%E6%9C%80%E5%B0%91%E4%BB%BB%E6%84%8F%E4%BA%A4%E6%8D%A2%E6%8E%92%E5%BA%8F%E8%AF%81%E6%98%8E%E7%94%A8%E7%BD%AE%E6%8D......
  • WebAPI局域网访问出错(经验总结)
    WebAPI局域网访问出错(经验总结)经验一:未设置入站规则方法:控制面板->系统和安全->WindowsDefender防火墙->高级设置->入站规则->新建规则->端口->,如图:下一页特定本地端口为WebAPI在IIS中设置的端口号。选择允许连接,最后起个名称完成即可。即可通过此设备......
  • redis实践经验总结
    Redis内存配置当Redis内存不足时,可能导致Key频繁被删除、响应时间变长、QPS不稳定等问题。当内存使用率达到80%以上时就需要我们警惕,并快速定位到内存占用的原因。一般来说,会有以下几种占用内存的情况:数据内存是Redis最主要的部分,存储Redis的键值信息。主要问题是BigKey问题......
  • 地方门户运营经验之SEO优化及外链
    由于近几年地方网站的火爆,在加上地方网站竞争度不大,所以越来越受到站长朋友的青睐。如果你建设本地网站的话,那对于推广则更加有力。今天凡凡我就自己运营半年多的地方门户网站心得分享给大家。第一,网站域名选择对于地方性门户网站来说,域名选择的时候最好以地方名的......