Updated body_parser

This commit is contained in:
thomashii 2021-06-21 09:27:19 +08:00
parent 3dda3cf844
commit 1a63e8f6bd
6 changed files with 74 additions and 50 deletions

View file

@ -44,6 +44,34 @@
* Migrated angel_auth_cache to 4.0.0 (0/7 tests passed)
* Migrated angel_auth_cors to 4.0.0 (10/15 tests passed)
* Migrated angel_oauth2 to 4.0.0 (17/25 tests passed)
* Migrated angel_proxy to 4.0.0 (5/7 tests passed)
* Migrated angel_file_service to 4.0.0 (6/6 tests passed)
* Migrated graphql_parser to 2.0.0 (55/55 tests passed)
* Migrated graphql_schema to 2.0.0 (34/35 tests passed)
* Migrated graphql_server to 2.0.0 (9/10 tests passed)
* Migrated graphql_generator to 2.0.0 (0/0 tests passed)
* Migrated data_loader to 2.0.0 (7/7 tests passed)
* Migrated angel_graphql to 2.0.0 (0/0 tests passed)
* Migrated angel_mongo to 3.0.0 (0/0 tests passed)
* Migrated angel_orm_mysql to 2.0.0 (0/0 tests passed)
* Migrated angel_orm_service to 2.0.0 (0/0 tests passed)
* Migrated body_parser to 2.0.0 (11/11 tests passed)
* Migrated angel_markdown to 3.0.0 (0/0 tests passed)
* Migrated angel_jinja to 2.0.0 (0/0 tests passed)
* Migrated angel_html to 3.0.0 (1/3 tests passed)
* Migrated angel_mustache to 2.0.0 (3/3 tests passed)
* Migrated angel_paginate to 3.0.0 (18/18 tests passed)
* Migrated angel_poll to 2.0.0 (0/5 tests passed)
* Migrated angel_redis to 2.0.0 (0/8 tests passed)
* Migrated angel_seeder to 2.0.0 (0/0 tests passed)
* Migrated angel_relations to 2.0.0 (0/0 tests passed)
* Migrated angel_rethink to 2.0.0 (0/0 tests passed)
* Migrated angel_security to 2.0.0 (0/1 tests passed)
* Migrated angel_sembast to 2.0.0 (10/10 tests passed)
* Migrated angel_sync to 3.0.0 (0/1 tests passed)
* Migrated angel_typed_service to 3.0.0 (4/4 tests passed)
* Migrated angel_shelf to 2.0.0 (0/1 tests passed)
* Migrated angel_user_agent to 2.0.0 (0/0 tests passed)
# 3.0.0 (Non NNBD)
* Changed Dart SDK requirements for all packages to ">=2.10.0 <3.0.0"

View file

@ -1,8 +1,18 @@
# 2.0.0
# Change Log
## 2.0.1
* Fixed source code formating warning
* Updated README
## 2.0.0
* Migrated to support Dart SDK 2.12.x NNBD
# 1.1.1
## 1.1.1
* Dart 2 updates; should fix Angel in Travis.
# 1.1.0
* Add `parseBodyFromStream`
## 1.1.0
* Add `parseBodyFromStream`

View file

@ -1,5 +1,6 @@
# Angel3 Body Parser
[![version](https://img.shields.io/badge/pub-v2.0.0-brightgreen)](https://pub.dartlang.org/packages/angel3_body_parser)
[![version](https://img.shields.io/badge/pub-v2.0.1-brightgreen)](https://pub.dartlang.org/packages/angel3_body_parser)
[![Null Safety](https://img.shields.io/badge/null-safety-brightgreen)](https://dart.dev/null-safety)
[![Gitter](https://img.shields.io/gitter/room/angel_dart/discussion)](https://gitter.im/angel_dart/discussion)
@ -11,35 +12,31 @@ Parse request bodies and query strings in Dart, as well multipart/form-data uplo
This is the request body parser powering the [Angel3](https://github.com/dukefirehawk/angel) framework. If you are looking for a server-side solution with dependency injection, WebSockets, and more, then I highly recommend it as your first choice. Bam!
### Contents
## Contents
* [Body Parser](#body-parser)
* [About](#about)
* [Installation](#installation)
* [Usage](#usage)
* [Thanks](#thank-you-for-using-body-parser)
- [Angel3 Body Parser](#angel3-body-parser)
- [Contents](#contents)
- [About](#about)
- [Installation](#installation)
- [Usage](#usage)
- [Custom Body Parsing](#custom-body-parsing)
# About
### About
I needed something like Express.js's `body-parser` module, so I made it here. It fully supports JSON requests.
x-www-form-urlencoded fully supported, as well as query strings. You can also include arrays in your query,
in the same way you would for a PHP application. Full file upload support will also be present by the production 1.0.0 release.
I needed something like Express.js's `body-parser` module, so I made it here. It fully supports JSON requests. x-www-form-urlencoded fully supported, as well as query strings. You can also include arrays in your query, in the same way you would for a PHP application. Full file upload support will also be present by the production 1.0.0 release.
A benefit of this is that primitive types are automatically deserialized correctly. As in, if you have a `hello=1.5` request, then
`body['hello']` will equal `1.5` and not `'1.5'`. A very semantic difference, yes, but it relieves stress in my head.
A benefit of this is that primitive types are automatically deserialized correctly. As in, if you have a `hello=1.5` request, then `body['hello']` will equal `1.5` and not `'1.5'`. A very semantic difference, yes, but it relieves stress in my head.
# Installation
### Installation
To install Body Parser for your Dart project, simply add body_parser to your
pub dependencies.
To install Body Parser for your Dart project, simply add body_parser to your pub dependencies.
dependencies:
angel3_body_parser: ^2.0.0
# Usage
### Usage
Body Parser exposes a simple class called `BodyParseResult`.
You can easily parse the query string and request body for a request by calling `Future<BodyParseResult> parseBody`.
Body Parser exposes a simple class called `BodyParseResult`. You can easily parse the query string and request body for a request by calling `Future<BodyParseResult> parseBody`.
```dart
import 'dart:convert';
@ -64,10 +61,9 @@ MyClass create(HttpRequest request) async {
}
```
## Custom Body Parsing
In cases where you need to parse unrecognized content types, `body_parser` won't be of any help to you
on its own. However, you can use the `originalBuffer` property of a `BodyParseResult` to see the original
request buffer. To get this functionality, pass `storeOriginalBuffer` as `true` when calling `parseBody`.
### Custom Body Parsing
In cases where you need to parse unrecognized content types, `body_parser` won't be of any help to you on its own. However, you can use the `originalBuffer` property of a `BodyParseResult` to see the original request buffer. To get this functionality, pass `storeOriginalBuffer` as `true` when calling `parseBody`.
For example, if you wanted to [parse GraphQL queries within your server](https://github.com/dukefirehawk/graphql_dart)...
@ -78,4 +74,4 @@ app.get('/graphql', (req, res) async {
// ...
}
});
```
```

View file

@ -69,20 +69,19 @@ Future<BodyParseResult> parseBodyFromStream(
stream = data;
}
var parts = MimeMultipartTransformer(contentType.parameters['boundary']!)
.bind(stream)
.map((part) =>
HttpMultipartFormData.parse(part, defaultEncoding: utf8));
var parts =
MimeMultipartTransformer(contentType.parameters['boundary']!)
.bind(stream)
.map((part) =>
HttpMultipartFormData.parse(part, defaultEncoding: utf8));
await for (HttpMultipartFormData part in parts) {
if (part.isBinary ||
part.contentDisposition.parameters.containsKey('filename')) {
var builder = await part.fold(
BytesBuilder(copy: false),
(BytesBuilder b, d) => b
..add(d is! String
? (d as List<int>?)!
: d.codeUnits));
(BytesBuilder b, d) =>
b..add(d is! String ? (d as List<int>?)! : d.codeUnits));
var upload = FileUploadInfo(
mimeType: part.contentType!.mimeType,
name: part.contentDisposition.parameters['name'],
@ -97,8 +96,8 @@ Future<BodyParseResult> parseBodyFromStream(
}
}
} else if (contentType.mimeType == 'application/json') {
result.body
.addAll(_foldToStringDynamic(json.decode(await getBody()) as Map?)!);
result.body.addAll(
_foldToStringDynamic(json.decode(await getBody()) as Map?)!);
} else if (contentType.mimeType == 'application/x-www-form-urlencoded') {
var body = await getBody();
buildMapFromUri(result.body, body);

View file

@ -1,5 +1,5 @@
name: angel3_body_parser
version: 2.0.0
version: 2.0.1
description: Parse request bodies and query strings in Dart. Supports JSON, URL-encoded, and multi-part bodies.
homepage: https://github.com/dukefirehawk/angel/tree/angel3/packages/body_parser
environment:

View file

@ -1,21 +1,12 @@
name: angel_redis
name: angel3_redis
version: 2.0.0
description: An Angel service provider for Redis. Works well for caching volatile data.
homepage: https://github.com/angel-dart/redis
publish_to: none
homepage: https://github.com/dukefirehawk/angel/tree/angel3/packages/redis
environment:
sdk: '>=2.12.0 <3.0.0'
dependencies:
angel_framework:
git:
url: https://github.com/dukefirehawk/angel.git
ref: sdk-2.12.x_nnbd
path: packages/framework
angel_http_exception:
git:
url: https://github.com/dukefirehawk/angel.git
ref: sdk-2.12.x_nnbd
path: packages/http_exception
resp_client: ^1.2.0
dev_dependencies:
test: ^1.17.8