Skip to content

Instantly share code, notes, and snippets.

@ThomasLocke
Created September 21, 2013 13:28
Show Gist options
  • Save ThomasLocke/6650607 to your computer and use it in GitHub Desktop.
Save ThomasLocke/6650607 to your computer and use it in GitHub Desktop.
Dead simple HTTP server in Dart - snippet 1
import 'dart:async';
import 'dart:io';
import 'package:route/server.dart';
import 'package:route/url_pattern.dart';
final Map<String, UrlPattern> Urls = {'/' : new UrlPattern('/'),
'ninja' : new UrlPattern('/ninja'),
'pirate' : new UrlPattern('/pirate'),
'samurai' : new UrlPattern('/samurai')};
final RegExp allUrls = new RegExp('/(.*)');
void main() {
HttpServer.bind(InternetAddress.ANY_IP_V4, 8080).then((HttpServer server) {
Router router = new Router(server)
..filter(allUrls, logVisitor)
..serve(Urls['/']).listen(serveHome)
..serve(Urls['ninja']).listen((HttpRequest r) => servePage(r, 'Ninja'))
..serve(Urls['pirate']).listen((HttpRequest r) => servePage(r, 'Pirate'))
..serve(Urls['samurai']).listen((HttpRequest r) => servePage(r, 'Samurai'))
..defaultStream.listen(send404);
});
}
Future<bool> logVisitor(HttpRequest request) {
print('Uri: ${request.uri} - Agent: ${request.headers.value('User-Agent')}');
return new Future.value(true);
}
void serveHome(HttpRequest request) {
StringBuffer sb = new StringBuffer();
sb.write('<h1>Home</h1>');
sb.write('<p><a href="/ninja">Ninja</a></p>');
sb.write('<p><a href="/pirate">Pirate</a></p>');
sb.write('<p><a href="/samurai">Samurai</a></p>');
writeAndClose(request, sb.toString());
}
void servePage(HttpRequest request, String kind) {
StringBuffer sb = new StringBuffer();
sb.write('<h1>${kind}</h1>');
sb.write('<p><a href="/">Go home</a></p>');
writeAndClose(request, sb.toString());
}
void writeAndClose(HttpRequest request, String content) {
request.response.write(content);
request.response.close();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment