DEV Community

Cover image for Web servers with dart
Akash Pattnaik
Akash Pattnaik

Posted on • Updated on

Web servers with dart

So, you know express.js or fastify or Koa.js? Cool, but what if your primary language is dart? You gonna learn Node.js just for that?!
No right. I thought so.

So, what are we waiting for ? Let's get started for web servers in dart.

First of all, install the official shelf dependency.

dependencies:
  shelf: ^1.2.0 # Prefer latest please !
Enter fullscreen mode Exit fullscreen mode

Then, let's jump into the codes...

import 'dart:async';
import 'package:shelf/shelf.dart';
import 'package:shelf/shelf_io.dart' as shelf_io;

Future<Response> manageRequests(Request request) async {
  print('[Debug] ${request.method} ${request.requestedUri.normalizePath().path}');
  switch (request.requestedUri.normalizePath().path) {
    case '/':
      return Response.ok(
        File('app/index.html').readAsStringSync(),
        headers: {
          'Content-Type': 'text/html',
        }
      );
    case '/index.html':
      return Response.ok(
        File('app/index.html').readAsStringSync(),
        headers: {
          'Content-Type': 'text/html',
        }
      );
    case '/tailwind.css':
      return Response.ok(
        File('app/tailwind.css').readAsStringSync(),
        headers: {
          'Content-Type': 'text/css',
        }
      );
    case '/script.js':
      return Response.ok(
        File('app/script.js').readAsStringSync(),
        headers: {
          'Content-Type': 'text/javascript',
        }
      );
    default:
      return Response.notFound('Not found');
  }
}

Future<void> serve() async {
  FutureOr<Response> Function(Request) handler = Pipeline().addHandler(manageRequests);
  try {
    HttpServer server = await shelf_io.serve(handler, 'localhost', 1134);
    print('[Info] Serving at http://${server.address.host}:${server.port} !');
  } catch (error) {
    print('[Warning] Port 1134 is already in use.');
    exit(0);
  }
}

void main(List<String>? args) async {
    await serve();
}
Enter fullscreen mode Exit fullscreen mode

This will start the WebServer at the port 1134.
Now Ofc there exists multiple libraries on pub.dev like express.js implemented in dart (with less features) but trust me, you seriously don't wanna get into those, this is the best way of making WebServers in Dart. More like fastest and easiest way in dart.

  • Guess what, This works in Flutter too...

Image description

Top comments (0)