Zard Darto Middleware
Validation middleware for Darto using Zard. Inspired by the zod-express-middleware package from the Node.js ecosystem, bringing a similar validation experience to Dart/Flutter servers.
Support 💖
If you find Zard Darto Middleware useful, please consider supporting its development 🌟Buy Me a Coffee.🌟 Your support helps us improve the package and make it even better!
📦 Installation
Add to your pubspec.yaml
:
dependencies:
zard_darto_middleware: ^0.0.1
or via terminal:
dart pub add zard_darto_middleware
🚀 Basic Usage
Import the packages:
import 'package:darto/darto.dart';
import 'package:zard/zard.dart';
import 'package:zard_darto_middleware/zard_darto_middleware.dart';
Create your schemas:
final userBodySchema = z.map({
'name': z.string().min(3),
'email': z.string().email(),
'age': z.int().min(18),
});
final userQuerySchema = z.map({'ref': z.string().optional()});
final userParamSchema = z.map({'id': z.string().uuid()});
Use the middleware:
app.post(
'/users/:id',
validateRequest(
body: userBodySchema,
query: userQuerySchema,
params: userParamSchema,
),
(Request req, Response res) {
final body = req.$body; // Acccess validated body
final query = req.$query; // Access validated query
final params = req.$params; // Access validated params
return res.json({
'message': 'Validation passed',
'body': body,
'query': query,
'params': params,
});
},
);
📖 Available Methods
validateRequest
Validates body
, query
, and params
at once.
validateRequest({
ZardSchema? body,
ZardSchema? query,
ZardSchema? params,
})
- If validation fails, it automatically responds with a 400 error.
validateRequestBody
Validates only the request body
.
validateRequestBody(ZardSchema schema)
validateRequestQuery
Validates only the request query
parameters.
validateRequestQuery(ZardSchema schema)
validateRequestParams
Validates only the request params
(e.g., /users/:id
).
validateRequestParams(ZardSchema schema)
sendError
You can manually validate and send errors using:
final result = schema.safeParse(req.body);
if (!result.success) {
return sendError('Body', result.error, res);
}
- The first argument is the type (
'Body'
,'Query'
,'Params'
). - The second argument is the error from
Zard
. - The third argument is the response by reference.
🔥 Accessing Validated Data
After validation, you can access strictly-typed and validated data via:
req.$body
req.$query
req.$params
📚 Full Example
void main() {
final app = Darto();
final userBodySchema = z.map({
'name': z.string().min(3),
'email': z.string().email(),
'age': z.int().min(18),
});
final userQuerySchema = z.map({'ref': z.string().optional()});
final userParamSchema = z.map({'id': z.string().uuid()});
app.post(
'/users/:id',
validateRequest(
body: userBodySchema,
query: userQuerySchema,
params: userParamSchema,
),
(Request req, Response res) {
final body = req.$body; // Access validated body
final query = req.$query; // Access validated query
final params = req.$params; // Access validated params
res.json({
'message': 'Validation passed',
'body': body,
'query': query,
'params': params,
});
},
);
app.get('/users/:id', validateRequestParams(userParamSchema), (
Request req,
Response res,
) {
final id = req.$params['id']; // Access validated params
res.json({'message': 'Validation passed', 'params': id});
});
app.listen(3000);
}
✨ Notes
- If validation fails, errors are automatically formatted and returned.
- Error messages are generated by
Zard
. - Fully aligned with Darto's minimalistic philosophy.
Contribution
Contributions are welcome! Feel free to open issues and pull requests on the GitHub repository..
License
This project is licensed under the MIT License. See the LICENSE file for more details.
Made with ❤️ for Dart/Flutter developers! 🎯✨
Libraries
- zard_darto_middleware
- Support for doing something awesome.