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);

有关更多详细信息,请参阅示例和测试文件夹。

GitHub

https://github.com/unger1984/dia