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?)=> 404res.internalServerError(data?)=> 500res.accepted(data?)=> 200res.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()
以访问下一个回调