Dia
一个简单的 Dart HTTP 服务器,类似于 KoaJS。
该包允许您在几行代码中创建 http / http 服务器。Dia 从一组请求和响应创建上下文,并将其传递给中间件。
该项目的主要理念是极简主义。该包仅包含基本功能,所有其他功能均在单独的包中实现。这使得您可以保持项目代码的整洁,并仅连接那些真正需要的依赖项。
安装
将此添加到 pubspec.yaml 的 dependencies 部分
dia: ^0.1.3
然后运行 pub get
用法
一个简单的使用示例
import 'package:dia/dia.dart';
main() {
final app = App();
app.use((ctx,next) async {
ctx.body = 'Hello world!';
});
app
.listen('localhost', 8080)
.then((info) => print('Server started on https://:8080'));
}
Context 包含 `HttpRequest` 字段的 getter 和 setter:response, response.headers, response.headers.contentType, response.statusCode,允许轻松使用它们。
Context 包含 `throwError` 方法,允许通过 statusCode 轻松返回 HTTP 错误。
示例 `throwError`
app.use((ctx,next) async {
ctx.throwError(401);
});
您可以使用自定义 `Context`,其中包含附加字段和方法。在这种情况下,您需要继承自基类 Context,并将 context 创建函数的实例传递给 App 构造函数。
/// Create custom context class
class CustomContext extends Context{
String? additionalField;
CustomContext(HttpRequest request) : super(request);
}
void main() {
/// Create Dia instance
final app = App((request) => CustomContext(request));
/// Add additionalField value
app.use((ctx, next) async {
ctx.additionalField = 'additional value';
await next();
});
/// final middleware to response
app.use((ctx, next) async {
ctx.contentType = ContentType.text;
ctx.body = ctx.additionalField;
});
/// Start server listen on localhost:8080
app
.listen('localhost', 8080)
.then((info) => print('Server started on https://:8080'));
}
您可以为所有 HTTP 错误添加处理程序
app.use((ctx,next) async {
await next();
if(ctx.statusCode!=200){
//....
}
});
您可以使用 SSL 启动服务器
const serverKey = 'cert/key.pem';
const certificateChain = 'cert/chain.pem';
final serverContext = SecurityContext();
serverContext
.useCertificateChainBytes(await File(certificateChain).readAsBytes());
serverContext.usePrivateKey(serverKey, password: 'password');
app.listen('localhost', 8444, securityContext: serverContext);
有关更多详细信息,请参阅示例和测试文件夹。