Queen Palace

用于处理传入 HTTP 请求的服务器端 Dart 微框架。

hello world 应用程序

Future<void> main(List<String> args) async {
  final palace = Palace();
  palace.get('/greet_the_queen', (req, res) => res.send('Long Live The Queen ?'));
  await palace.openGates();
}

带有装饰的 hello world

装饰将帮助您轻松地将代码分割为部分或模块,使应用程序易于维护

void main(List<String> args) async {
  final palace = Palace();
  palace.controllers([MainController()]);
  await palace.openGates();
}

class MainController extends PalaceController {
  MainController() : super('/');

  @Get()
  void greeTheQueen(Request req, Response res) {
    return res.send('Long Live The Queen ?');
  }
}

核心部分

Palace

  • 注册路由和每个路由的回调
  • 使用守卫 'palace.use(CORSGuard())' 作为示例
  • 开启服务器
  • 关闭服务器

Request

dart:io HttpRequest 的封装类,具有额外的函数和getter,让您的生活更轻松。

Response

dart:io HttpResponse 的封装类,同样具有额外的函数和getter,让您的生活更轻松。

其中一些函数是

  • res.json(data?) 将把给定的数据转换为 JSON 并发送回用户
  • res.file(path) 给它路径,它将把文件提供给用户
  • res.notFound(data?) => 404
  • res.internalServerError(data?) => 500
  • res.accepted(data?) => 200
  • res.created(data?) => 201

等等...

中间件,又名 **Guard** ?‍♂️

一个简单的函数

  • 返回 void
  • 接受您想要的任何参数,从0个参数或完整的参数列表开始(请参见下面的参数列表)
  • 守卫被认为是处理器层之前的额外层
  • 它们可以注册为特定路由,或作为全局守卫处理任何类型的请求
  • 它们可以响应传入的请求,因为它们可以访问传入的请求
  • 它们可以在处理器触发之前或之后执行任何类型的逻辑

PalaceException 类

您可以从应用程序的任何地方抛出它们
因此,守卫、处理器甚至服务都可以抛出它们

但是接下来会发生什么?
Palace 将捕获异常,将其格式化为 JSON,包括提供的数据对象(如果提供了)
并结束请求的生命周期

  • 这里有一些
  • BadRequest(data?)
  • NotFound(data?)
  • Unauthorized(data?)

回调参数

如果您正在使用装饰器,您可以将额外的参数推送到您的端点回调或守卫中
您可以从传入的请求中提取这些类型的数据

  • 没有装饰器,您可以通过声明它们的类型来访问传入的请求或响应
  @Get()
  void sayHi(Request req,Response Res) {
    //logic
    }

需要直接访问强类型的请求体?
使用 @Body() 装饰器

class SignUpBody{
  late String name;
  late String email;
  late String password;
}
  @Post()
  void signUp(Request req,Response Res,@Body() SignUpBody body) {
    //logic
    }

需要访问请求体中的特定值?

@Body('key') String email

对于以下也是如此

@Query()
@QueryParam()
@Param()

如果您正在构建一个守卫,请使用

@Next()

以访问下一个回调

GitHub

https://github.com/maxzod/palace