Created
September 21, 2013 13:28
-
-
Save ThomasLocke/6650607 to your computer and use it in GitHub Desktop.
Dead simple HTTP server in Dart - snippet 1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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