Создание блога на Dart. Часть 1.
Создание блога на Dart. Часть 1.
Создание блога на Dart. Часть 2.
Создание блога на Dart. Часть 3.
HTTP сервер на Dart
Язык Dart позиционируется его создателями как язык, который можно использовать как на клиенте, так и на сервере. И если с клиентом, блягодаря ангуляру, вопросов не возникает, то на сервере dartlang используют редко. Я решил попробовать Dart именно как серверный язык и написать на нем блог.
Структура блога проста — есть страницы постов и есть страницы со списком постов. Для начала создадим в папке проекта подпапку httpserver и в ней создадим файл server.dart. Этот файл будет точкой входа приложения. В нем будет только один метод main.
Future main() async { HttpServer requestServer = await HttpServer.bind(InternetAddress.LOOPBACK_IP_V4, 4040); Router router = injector.get(Router); print('listening on localhost, port ${requestServer.port}'); try { await for (HttpRequest request in requestServer) { await router.processRequest(request); } } catch (e) { print(e.toString); } }
Класс HttpServer инкапсулирует в себе логику HTTP сервера. Так же он реализует интерфейс Stream
Dependency Injection в Dart
DI контейнер находится в пакете di. Для его подключения нужно его указать в файле pubspec.yaml:
dependencies: di: ">=3.3.4 <4.0.0"
Создается контейнер следующим образом:
import 'package:di/di.dart'; ... ModuleInjector _injector; void _initInjector(){ _injector = new ModuleInjector([new Module() ..bind(Router) ..bind(PostRepository) ]); } ModuleInjector get injector { if (_injector == null) _initInjector(); return _injector; }
Здесь инжектор сделан одиночкой.
При регистрации зависимостей я не указываю отдельно интерфейс и реализацию, потому что я не стал разделять. Но это позволит в будущем переопределить реализацию не трогая весь остальной код.
Пример получения зависимости был выше
Router router = injector.get(Router);