Введение в Deno, новую среду выполнения JavaScript

Deno - это безопасная среда выполнения JavaScript, которая была создана для устранения некоторых ошибок в Node.js, которые не были устранены во время его разработки. Несмотря на то, что Deno еще не готов к развертыванию приложений в производственной среде, он может заменить Node.js в будущем, так что давайте приступим!

Эта статья познакомит нас со средой Deno путем создания простого приложения Todo, которое будет использовать платформу промежуточного программного обеспечения Oak для обработки запросов и nodeDB для сохранения. Поскольку Deno может запускать TypeScript, этот проект также полностью написан на нем. После подключения приложение будет выглядеть примерно так:

Приложение Deno Todo (react-todo-deno-abrar.web.app)

Перед тем, как начать, вот полный исходный код приложения, он должен дать нам хорошее представление о файловой структуре приложения. Мы сосредоточимся только на бэкэнд-коде, а внешний интерфейс будет использоваться только для тестирования бэкэнда. Также следует помнить, что к этой статье относятся только основные ветки этих репозиториев.

Бэкэнд: https://github.com/abrarhayat/deno-app-oak

Внешний интерфейс: https://github.com/abrarhayat/react-todo-app

Прежде чем продолжить работу с исходным кодом, нам необходимо выполнить эти шаги из файла README.md в внутреннем репозитории. Приложение не будет работать, пока эти требования не будут выполнены. Мы пишем файл scripts.json для использования denon, который представляет собой пакет, который может моделировать переменные среды Deno и упрощает процесс разработки. Мы разрешим Deno runtime доступ к нашей сети и переменным среды. Наш стартовый скрипт будет выглядеть так:

deno run --allow-net --allow-env app.ts

Теперь мы внимательно посмотрим на внутренний код, начиная с app.ts.

Сначала делаем необходимый импорт. Импорт любых библиотек в Deno JS выполняется из URL-адресов, а затем кешируется в систему, в отличие от импорта, который мы ранее выполняли в приложениях Node JS из node_modules.

В структуре промежуточного программного обеспечения Oak каждое промежуточное программное обеспечение в приложении запускается внутри предыдущего промежуточного программного обеспечения. Таким образом, мы определяем промежуточное программное обеспечение обработки ошибок как первое промежуточное программное обеспечение, чтобы мы могли перехватывать ошибки от всех других промежуточных программ и обрабатывать их. Мы также всегда ожидаем функции next (), чтобы убедиться, что все обещания, возвращаемые в последующих промежуточных программах, выполнены.

Мы регистрируем промежуточное программное обеспечение для обработки заголовков cors, поскольку у нас есть отдельное клиентское приложение, а затем мы регистрируем маршруты для наших конечных точек. Нам нужно регистрировать маршруты немного иначе, чем в приложениях NodeJS Express. Фактически мы регистрируем результат .routes () и .allowedMethods () маршрутизатора. Затем мы получаем желаемый порт из среды Deno и запускаем наше приложение.

Мы подключаемся к базе данных перед запуском нашего приложения с помощью функции connect (), которую мы подробно обсудим позже.

Более пристальный взгляд на конечные точки:

Мы будем использовать пакет DenoDB для постоянства и реализовать сервер MySQL. Нам нужно поместить действительные данные MySQL в файл scripts.json, как указано в файле README.md. Затем мы экспортируем нашу базу данных для использования в наших моделях и используем функцию подключения в app.ts перед запуском нашего приложения.

Мы определяем модель для наших задач с помощью DenoDB. Наша модель будет иметь два поля: поле id, которое будет увеличиваться автоматически и будет служить в качестве первичного ключа, и наш текст поле будет содержать текст нашей задачи. Затем мы связываем нашу модель Todo с объектом db, созданным на предыдущем шаге, и синхронизируем нашу модель.

И наконец, что не менее важно, у нас есть логика нашего контроллера, определенная для всех наших операций Todo CRUD. Для промежуточного программного обеспечения в Oak мы получаем объект контекста и следующую функцию в качестве параметров функции обработчика запросов.

Мы используем объект контекста, чтобы решить, что мы собираемся отправить в нашем ответе, или для получения данных из тела запроса и следующей функции, которая приведет нас к следующему промежуточному программному обеспечению. Нам просто нужно настроить ответ, а не отправлять его. Ответ будет отправлен самим фреймворком.

Мы настраиваем содержимое тела ответа в ctx.response.body и получаем тело запроса из ctx.request.body.value , который в основном возвращает обещание, поэтому нам нужно его дождаться.

Давайте сравним Express.js с Oak с точки зрения обработки транзакций REST api.

Получение тела запроса и отправка ответа JSON в Express против Oak:

//get the request body
const body = request.body //Express
const body = await ctx.request.body.value //Oak
//send JSON data response
response.json(data) //Express
ctx.response.body = data //Oak

Вывод

И вот оно, наше первое приложение, написанное для среды Deno. Это очень простое приложение, но это хорошая отправная точка для дальнейшего развития. Deno многообещающий, так что нам определенно стоит поэкспериментировать с ним и изучить больше интересных сторонних библиотек!