Updated body_parser
This commit is contained in:
parent
3dda3cf844
commit
1a63e8f6bd
6 changed files with 74 additions and 50 deletions
28
CHANGELOG.md
28
CHANGELOG.md
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
## 1.1.0
|
||||
|
||||
* Add `parseBodyFromStream`
|
|
@ -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)...
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue