Рубрики
Без рубрики

Создание приложения Node.js на Android

Aurélien Giraud Building Node.js приложение Node.js на AndroidPart 2: Express и Nedbin Part 1 Мы видели, как использовать Termux, эмулятор терминала и среды Linux для Android. Мы также отредактировали файлы с vim и увидели, как запустить узел. Теперь мы собираемся построить маленький

Автор оригинала: FreeCodeCamp Community Member.

Aurélien Giraud.

Часть 2: Express and Nedb

В Часть 1 Мы увидели, как использовать Termux, эмулятор терминала и среды Linux для Android. Мы также отредактировали файлы с vim и увидели, как запустить узел. Теперь мы собираемся построить небольшое приложение узла с помощью Express Framework и используйте NEDB для базы данных.

История, и кто мог извлечь выгоду из этого

Когда я узнал, я мог бы построить полное приложение Node.js с монго-подобной базой данных на моем планшете Android, у меня действительно взволнован. Поэтому я решил попробовать постараться и поделиться о моем опыте.

Оказывается, что, как только TERMUX работает на Android, и узел установлен, тот факт, что мы находимся на Android вместо Linux, не имеет большого значения. На самом деле, все определенные настройки TERMUX были сделаны в части 1, и вы можете приветствовать код вместе на предпочтительном устройстве/компьютере/Cloud IDE …

Это также означает, что, помимо того, что мы подставляем Mongo для NEDB, эта статья похожа на обычное введение в создание спокойных API и в основном для людей, которые являются довольно новыми для узла, Express и Mongo/Nedb.

Что мы собираемся сделать

Чтобы продемонстрировать, как начать работу с Express Web Framework и базой данных NEDB, давайте посмотрим на базовый трекер цели, который я строю для себя. На текущем этапе он выглядит как показано на рисунке выше.

Пользователи могут:

  • представить новую цель
  • Удалить цель
  • Запишите успех для цели
  • Записать неудачу для цели

Ну, на самом деле мы собираемся реализовать только две две функции в этом посте, и в случае, если вам интересно двумя оставшимися оставшимисями, я предоставим в конце ссылки на код полной реализации.

Поэтому без необходимости записи успехов и сбоев наш код будет выглядеть немного проще:

Вот шаги, которые мы собираемся пройти через:

  1. Настройте сервер с Выражать.
  2. Опишите несколько Истории пользователей.
  3. Настроить Недб Отказ
  4. Построить Redful API Отказ

Предпосылки

Мы собираемся начать там, где мы остановились частично 1. Таким образом, единственное требование является то, что узел будет установлен.

1. Настройка сервера с Express

Экспресс Это веб-каркас для узла, который помогает создавать приложения узла. Если у вас возникли проблемы с выяснением того, что экспресс приводит к узлу, я рекомендую вам проверить статью Evan Hahn Понимание Express Отказ

Давайте начнем новый проект:

$ mkdir goals-tracker && cd goals-tracker$ npm init$ touch server.js

и установить Express:

npm install express --save

Мы собираемся использовать Express, чтобы определить маршруты , То есть определить конечные точки приложения (URI) и настроить, как приложение отвечает на клиентские запросы.

Открыть server.js и копирование-вставка/запись:

С этим на месте вы можете запустить приложение:

$ node server.js

Это должно печатать на консоли Количество портов, на котором слушает сервер. Если вы посетите http://localhost: 8080 В браузере (при условии, что 8080 – это номер, который был напечатан на консоли), вы должны увидеть на странице: Наш первый маршрут работает.:)

Некоторые объяснения

‘/’ в app.get (…) Определяет маршрут, в котором мы хотим прикрепить некоторое поведение с сервера. Использование ‘/’ относится к базовому URI, в нашем случае: http://localhost: 8080 Отказ Обратите внимание, что мы получим тот же результат в окне браузера, если мы использовали app.get (‘/Цели’, …) вместо этого и посетил http://localhost: 8080/голы Отказ

Второй аргумент в app.get (…) это Обратный вызов Функция, которая позволяет нам определить, какой сервер должен делать при посещении маршрута в качестве первого аргумента. В этой функции:

  • req обозначает Запрос: Это информация о том, что сервер получает от клиента (например, это может прийти от кого-то, используя переднюю часть веб-сайта/приложения).
  • res обозначает Ответ: Это информация, которую сервер отправляет обратно пользователю. Это может быть веб-страницу или некоторые другие данные, такие как изображение, некоторые JSON или некоторые XML.

Узел

В следующих частях этого учебника мы собираемся внести несколько изменений в файл server.js Отказ Чтобы не перезапустить сервер вручную каждый раз, чтобы увидеть результат, мы можем установить Номемон Отказ

Nodemon – это утилита, которая будет контролировать изменения в вашем коде и автоматически перезапустить сервер. Мы собираемся установить его как зависимость только в разработке, используя тег Сохранить-dev:

npm install nodemon --save-dev

Теперь вы можете перезагрузить сервер с Номемон команда вместо Узел :

nodemon server.js

2. Истории пользователей

Прежде чем мы перейдем к части о NEDB, давайте на мгновение приостановимся по поводу бизнес-логики. Чтобы увидеть, что нам нужно для реализации, мы начинаем с определения нескольких пользовательских историй.

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

Вот 4 пользовательских история, которые мы собираемся использовать:

  1. Как пользователь, я могу сохранить новую цель со своей датой создания.
  2. Как пользователь, я могу получить доступ к всем целям, которые были сохранены.
  3. Как пользователь, я могу получить доступ к всей информации о цели.
  4. Как пользователь, я могу удалить цель.

В нашем случае истории отображают одну к одному на 4 операции Crud, которые мы собираемся говорить о части 4.

3. Использование NEDB.

Тот факт, что Недб Легко установить, хорошо задокументировано и использует API MongoDB, делает его идеальным для начала работы с разработкой приложений Node.js на Android. Там даже есть инструмент Чтобы помочь вам перейти на MongoDB позже, если нужно быть (я еще не пробовал, хотя).

Итак, давайте добавим NEDB в проект:

$ npm install nedb --save

и добавить в server.js Несколько строк для настройки базы данных и убедитесь, что мы можем сэкономить к нему:

А DataStore Относится к тому, что будет называться коллекцией в Монго. Мы могли бы создать несколько данных о данных, если нам нужно несколько коллекций. Как продемонстрировано в документации NEDB, каждая коллекция будет сохранена в отдельном файле. Здесь мы решили сохранить коллекцию целей в файле с именем Coals.db.

Проверка, если это сработало

Если сервер был запущен ранее с Номемон он должен был обновить после изменения server.js сохранился. Это означает, что db.insert (…) Должен быть запустить, и цель должна была быть зарегистрирована в консоли:

$ nodemon server.js[nodemon] 1.9.1[nodemon] to restart at any time, enter `rs`[nodemon] watching: *.*[nodemon] starting `node server.js`Listening on port 8080[nodemon] restarting due to changes...[nodemon] starting `node server.js`Listening on port 8080{ description: 'Do 10 minutes meditation every day', successes: [], failures: [], _id: 'ScfixKjsOqz9xBo5', createdAt: Fri Mar 18 2016 22:10:58 GMT+0000 (UTC), updatedAt: Fri Mar 18 2016 22:10:58 GMT+0000 (UTC) }

Новый файл под названием Goals.db также должно быть создано.

$ ls goals.db  node_modules/  package.json  server.js

И это должно содержать цель, которая только что сохранилась.

$ less goals.db{"description":"Do 10 minutes meditation every day","_id":"ScfixKjsOqz9xBo5","createdAt":{"$$date":1458339058282},"updatedAt":{"$$date":1458339058282}}

Обратите внимание, что поля _id , Создать и Updatedat были заполнены автоматически NEDB, потому что мы настроили DataStore с вариантом Timestampdata установить правда.

4. Создание восстановленного API

Далее давайте построим восстановление API для приложения. В двух словах это означает, что мы хотим использовать HTTP глагол и URI для того, чтобы позволить клиенту выполнить Crud Операции (создайте, чтение, обновление и удаление). Эти операции также обычно собираются отправлять обратные данные клиенту.

В условиях CRUD мы можем:

  • Создать Данные с Пост ,
  • Читать Данные с Получить ,
  • Обновить Данные с Поставить или Патч ,
  • Удалить Данные с Удалить Отказ

Глаголы HTTP, которые мы собираемся использовать в этом посте, являются Post, Get и Delete.

Наша API.

Вот таблица, показывающая маршруты, которые мы собираемся настроить, как они будут доступны (то есть, с помощью которого http глагол) и то, что каждый делает возможным:

Если вы хотите узнать больше о спокойных API, вы можете проверить Проектирование reзов Web API Матиас Хансен или Использование HTTP-методов для спокойных услуг Отказ

Тестирование API.

Мы собираемся проверить API вручную в терминале, используя Curl Отказ Если вы не на Android и не хотели бы использовать GUI для проверки API, вы можете использовать Почтальон Отказ

Позвольте увидеть первый пример того, как использовать Curl. Убедитесь, что сервер работает, открыть другой терминал (в Thermux Swipe направо с левой границы и нажмите на Новый сеанс ) и введите:

$ curl -X GET "http://localhost:8080"

Это должно печатать на консоль, что мы получили в окне браузера ранее, то есть: Наш первый маршрут работает.:)

Теперь мы добавим код в server.js биты по битам. Если вы предпочитаете увидеть «Большую» картинку, сначала вы можете отправиться в Final Server.js файл Отказ

Парсер

Чтобы обработать запросы, которые сервер получает, мы собираемся установить Тело-парсер Отказ Это обрабатывает входящие запросы и упрощает для нас доступ к соответствующим частям.

npm install body-parser --save

Добавьте код настройки Body-Parser на вершину server.js (например, сразу после настройки номера порта):

Получение всех целей

Если сервер получает Получить Запрос на /Цели , обратный вызов будет выполнен, и база данных будет запрошена с помощью db.find ({}) Отказ Здесь объект передан Найти () пустой. Это означает, что никакое ограничение не установлено на то, что мы ищем, и все объекты в базе данных должны быть возвращены.

Уведомление о том, что не указан обратный вызов Найти () Отказ Таким образом, объект курсора возвращается, что сначала может быть изменено с помощью Сортировать , Пропустить или Ограничить Прежде чем мы использовать EXEC (обратный вызов) закончить запрос. Здесь мы используем Сортировать Чтобы вернуть цели с самыми последними обновленными в верхней части (I.E. Те, что с «большим» датой последнего обновления).

Если все прошло хорошо, результат запроса (в нашем случае массив целей) отправляется обратно к клиенту, отформатированному как JSON. Если что-то пошло не так, и производится ошибка, сообщение об ошибке отправляется обратно к клиенту вместо этого.

Давайте тестируем, если это работает:

$ curl -X GET "http://localhost:8080/goals/"

Это должно печатать на консоль, массив, содержащий цель, которую мы сохранили в базе данных ранее.

Создание цели

req .body Содержит пары клавишных элементов данных, которые были представлены в тело запроса. По умолчанию он не определен, и он заселен Тело-парсер промежуточное ПО. В нашем случае запрос должен содержать пару ключ, ключ которой называется Описание ‘ и чье значение, таким образом, получено путем использования Req.body.description Отказ

Итак, во-первых, цель, которую мы хотим вставить в базу данных, создана из запроса с использованием Req.body.description Отказ Затем его можно вставить в базу данных, и если ошибка не было ошибки, ответ отправляется обратно на сервер как json.

Теперь давайте попробуем опубликовать новую цель, используя завиток:

$ curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d "description=Read about functional programming every day" "http://localhost:8080/goals/"

Это должно распечатать представление JSON за цель, которое было отправлено обратно клиенту.

Мы публикуем данные как X-www-форма-орленкадированный Отказ Это отправляет данные в качестве строк запросов, которые анализируются Тело-парсер Отказ

Получить цель, используя свой идентификатор

req.params является объектом, содержащим свойства, отображаемые на маршрут «Параметры». Здесь он позволяет нам получить доступ к значению ID цели, который должен прийти после /Цели/ в URL по запросу. Для этого на работе мы должны использовать толстую кишку на УРИ перед имуществом, которые мы хотим получить доступ к req.params Отказ

Кроме того, что мы используем Findone (…) вместо Найти (…) Ничего нового здесь здесь. Итак, давайте проверим это. Для этого вы можете проверить, что напечатано на консоль после того, как мы сохранили новую цель, используя пост и использовать его “_id” значение. Вот моя команда с ID я получил:

$ curl -X GET "http://localhost:8080/goals/JJtcFVQnoAxW7KXc"

Это должно печатать на консоль, цель с указанным идентификатором.

Удаление цели, используя свой идентификатор

Мы используем Удалить (…) Чтобы удалить цель из базы данных. Если удаление успешно, ответ отправляется с кодом состояния HTTP 200 ( 200 означает, что удаление было успешным ).

Упаковывать его вверх

Мы настроили сервер с Express и NedB и построили API для отдыха. То, что мы все еще отсутствуем, – это интерфейс и немного проводки.

Этот следующий шаг может снизить нас много разных дорог: выбирали бы шаблон двигатель и если да, какой? Bootstrap или аналогичная структура? Угловой, реагировать, Aurelia? Список просто продолжается и включен.

Если вы хотите посмотреть на минимальную реализацию интерфейса – и, возможно, играть с ним в браузере – вы можете увидеть код возможного решения, которое я реализовал, используя Руль , Материал дизайн Lite и Fetch API посещение его репо на Github Или, клонируя это:

$ git clone --branch rest-and-view https://github.com/aurerua/goals-tracker.git --depth 1

Идти дальше

Задний конец, который мы построили, все еще поднимают вопрос: как код должен быть разделен в разные файлы и папки для лучшей модульности и ремонтопригодности?

В случае, если вам интересно, я также пишешь Еще одна версия приложения Это использует структуру папки контроллера модели-контроллера. Не стесняйтесь посмотреть:

$ git clone https://github.com/aurerua/goals-tracker-mvc.git

И если у вас есть какие-либо вопросы или отзывы, не стесняйтесь обращаться ко мне!