Как по-настоящему воспользоваться NodeJS REPL

Удачно отладьте свой проект

Узнайте, как использовать асинхронные методы в консоли NodeJS REPL.

Вступление

Использование Ruby on Rails и NodeJS в качестве двух наших основных серверных технологий имеет как преимущества, так и недостатки. Заменить повседневный язык и учиться на другой технологии - это действительно здорово, но, конечно, вы также начинаете упускать некоторые функции из той, которую вы оставили позади.

Вот что случилось с рельсами: они упустили свою консоль (среди прочего). Консоль rails - это место, где все методы и объекты приложения доступны для взаимодействия. С его помощью можно отслеживать состояние всего приложения и управлять им, что упрощает отслеживание производственных ошибок.

Как (в основном) разработчик NodeJS, я хотел найти аналогичный способ управления состоянием и просмотра моделей сохраняемости без входа в базу данных. Итак, я начал с исследования Node REPL.

Начиная с REPL

Консоль NodeJS REPL была отправной точкой. Большая разница между этой консолью и консолью Rails в том, что консоль rails загружает все ваши драгоценные камни, классы и другие объекты автоматически, тогда как здесь мы должны делать это вручную.

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

Первый подход - запросить служебный файл при запуске консоли:

Итак, начнем с создания console.js, запуска REPL и добавления наших объектов:

Мы можем запустить его с помощью `node console.js`

Здесь мы требуем каждый файл в службе и добавляем его в наш контекст REPL как имя файла + «Служба».

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

Эта проблема

В нашем экспресс-загрузке js у нас есть пример MVC-приложения с пользователями и книгами. Мы собираемся попытаться использовать сервис нашего пользователя, чтобы получить пользователя из базы данных.

Мы видим, что запрос был выполнен, но результата не было. Методы наших сервисов возвращают Promises, и чтобы увидеть результат, нам нужно выполнить это обещание.

Итак, нам придется делать это каждый раз, когда мы хотим проверить метод обслуживания? Ясно, что для этого есть лучшее решение: использование Async / Await.

Решение

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

Давай попробуем!

Потрясающие!

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

Не стесняйтесь обращаться ко мне, если у вас возникнут отзывы, предложения или вопросы.