zard_darto_middleware 0.0.1
zard_darto_middleware: ^0.0.1 copied to clipboard
Validation middleware for Darto using Zard.
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! 🎯✨