express_dt 1.0.2
express_dt: ^1.0.2 copied to clipboard
A Dart library to easily create http servers and perform requests.
example/example.dart
// import 'dart:html';
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'dart:math';
import 'package:express_dt/express_dt.dart';
import 'package:path/path.dart' as p;
import 'package:dotenv/dotenv.dart' show load, clean, isEveryDefined, env;
// import 'websocket.dart';
// EXPRESS_SECRET_KEY
dynamic main() {
load();
var express = Express();
//let express know to serve from the /web directory
express.use(Express.static('example/web'));
//Allowe cross Origin requests
express.use(Cors(['*']));
//Use path to get directory of the files to serve on that route
express.get(ExpressMethod(route: '/home', callbacks: [
(ExpressRequest req, ExpressResponse res) {
int numb = Random().nextInt(7);
if (numb % 2 == 0) {
} else {
return res
.statusCode(400)
.toJson({"message": "Only even numbers allowed"});
}
},
(
ExpressRequest req,
ExpressResponse res,
) {
return res.statusCode(200).sendFile(p.absolute('web/index.html'));
}
]));
express.get(ExpressMethod(route: '/', callbacks: [
(ExpressRequest req, ExpressResponse res) {
int numb = Random().nextInt(7);
// print(numb);
if (numb % 2 == 0) {
} else {
return res
.statusCode(400)
.toJson({"message": "Only even numbers allowed"});
}
},
(ExpressRequest req, ExpressResponse res) {
// req.sessions!.addAll({'state': "secret"});
return res.statusCode(200).send('<h1>Hello World</h1>');
},
]));
//route to create a jwt token
express.get(ExpressMethod(route: '/tokenRoute', callbacks: [
(req, res) {
String token = expressSign('Sjkbdjaksdjas', env['EXPRESS_SECRET_KEY']!);
return res.statusCode(200).toJson({"token": token});
}
]));
//route with a middleware to verify jwt token
express.get(ExpressMethod(route: '/verifyToken', callbacks: [
(req, res) {
String? token = extractTokenFromHeader(req.headers);
if (token == null) {
return res.statusCode(400).send('Authorization Failed');
} else {
var data = expressVerify(token, env['EXPRESS_SECRET_KEY']!);
if (data == null) {
return res.statusCode(400).send('Authorization Failed');
}
}
},
(req, res) {
return res.statusCode(200).send('Authorized');
}
]));
//post request
express.post(ExpressMethod(route: '/post', callbacks: [
(ExpressRequest req, ExpressResponse res) async {
return res.statusCode(200).toJson(req.body);
}
]));
//plain text
express.get(ExpressMethod(route: '/text', callbacks: [
(ExpressRequest req, ExpressResponse res) {
return res.statusCode(200).send('data');
}
]));
// request parameters
express.get(ExpressMethod(route: '/param/:username', callbacks: [
(ExpressRequest req, ExpressResponse res) {
return res.statusCode(200).toJson({'params': req.params});
}
]));
// query parameters
express.get(ExpressMethod(route: '/query', callbacks: [
(ExpressRequest req, ExpressResponse res) {
return res.statusCode(200).toJson(req.query);
}
]));
//Upload Files
express.post(ExpressMethod(route: '/upload', callbacks: [
(req, res) async {
for (var i = 0; i < req.files.keys.length; i++) {
//Handle your file stream as you see fit, write to file, pipe to a cdn etc --->
var file = File(req.files[req.files.keys.toList()[i]]!.filename!);
await for (var data in req
.files[req.files.keys.toList()[i]]!.streamController!.stream) {
if (data is String) {
await file.writeAsString(data, mode: FileMode.append);
} else {
await file.writeAsBytes(data, mode: FileMode.append);
}
}
}
return res.statusCode(200).toJson(req.body);
}
]));
express.get(ExpressMethod(route: '/websockets', callbacks: [
(req, res) {
// print(req.url.)
if (req.url.path == '/websockets') {
print('Herte');
WebSocketTransformer.upgrade(req).then((WebSocket ws) {
ws.listen((event) {
print('Hello + $event');
Timer(Duration(seconds: 1), () {
if (ws.readyState == WebSocket.open)
// checking connection state helps to avoid unprecedented errors
ws.add(json.encode({
'data': 'from server at ${DateTime.now().toString()}',
}));
});
});
}, onError: (e) {
print(e);
});
}
// print('Here');
}
]));
//Bind server to port 4000
express.stream(8080, callback: () {});
}