REST API на основе Express, MongoDB(Mongoose)

Недавно закрылся Parse, жаль. Но, делать нечего, да и для простых случаев можно обойтись самодельным REST API который будет хоститься на Heroku. Начальная ситуация – у вас установлен Node.js, если нет, то загляните на официальный сайт и установите его для своей платформы.

Теперь начнём. Перейдите в терминал и выполните:

Первой командой вы глобально установите сервер и генератор приложений на основе express.js. А второй запустите этот самый генератор, на создание базового приложения в папку todo-backend. Для того чтобы посмотреть как оно выглядит необходимо выполнить команду (в консоли) npm start и открыть браузер по адресу http://localhost:3000.

Базовое приложение

Так, теперь давайте разберёмся что к чему и зачем такое количество настроек внутри главного файла app.js

Morgan – модуль для журналирования всех http-запросов к приложению. А cookieParser и bodyParser это модули для обработки cookie и содержимого http-запроса, так чтобы потом можно было получить req.body и req.cookie.

express.static – middleware для отдачи статичных файлов (если вдруг у вас для этого не nginx). Работает по принципу стандартного middleware, в примере выше любой http запрос будет проходить проверку на наличие файла в папке public. Если папок со статичными файлами больше, то просто добавьте такой же middleware. Если есть необходимость добавить виртуальный префикс, то добавьте в middleware проверку url-пути, app.use('/static', express.static('public')) – тогда файлы будет доступны как /static/файлы.

app.set – это стандартный сеттер node.js, а геттер – app.get. Пример: app.set("some variable", "value"), app,get("some variable").
Выше для приложения установлены: папка для шаблонов и шаблонизатора Jade.

Уже второй раз встречается app.use, но ещё ни разу не описан. Итак, app.use – это применение middleware к http запросу, по конкретному пути или к любому. В качестве параметров функция use принимает:

  • путь, например “/api”, тогда middleware сработает для любого http запрос в пути которого есть /api. Кстати, сюда можно передать не только строку, но и регулярное выражение.
  • функцию на вход которой app.use передаст три параметра: request, response, next

Другими словами в файлах ./routes/index и ./routes/users определены обработчики http запросов, а app.use('/', routes) указано по какому url они должны быть применены.

Публикация приложения на heroku

Можно уже показать приложение в интернете, пока оно конечно не очень много умеет. Но, это только начало. Для хостинга воспользуемся сервисом heroku, который предоставляет бесплатный тариф (там есть ряд ограничений, но сейчас они несущественны).

Установите heroku toolbelt для своей системы и зарегистрируйте учётную запись. Если ваша “консолько” открыта в папку проекта, то ок, иначе откройте консоль и перейдите в папку проекта. Для обновления проекта на heroku вам понадобится утилита git, проще всего скачать и установить Github for Desktop.

В первую очередь отправим созданные изменения в git. Для этого в папке проекта выполните команду git init . она инициализирует новый git репозитарий. Теперь для того чтобы не отслеживать изменения в установочных файлах, их надо занести в список игнорируемых. Создайте файл .gitignore и вставьте в него node_modules. Всё можно создать первый коммит.

Проверьте, что он появился в списке коммитов, при помощи команды git log.

Приготовления для публикации проекта готовы, поехали дальше, . Опубликуем его. Оставаясь в папке проекта выполните команды:

Управление приложением в heroku производится на основе Procfile, подробнее на сайте heroku. Создайте файл Procfile в корневой папке проекта и вставьте содержимое: web: node ./bin/www. Обновим репозитарий новым коммитом и отправим приложение в heroku.

Ура. Можно посмотреть приложение, открыв адрес вручную или при помощи команды heroku open.

База данных, работа с ORM

В качестве базы данных будет использована Mongo. По разным причинам, но это не обязательно, множество приложений работает и на MySQL и на Postgresql. Локальная установка и настройка MongoDB описаны на сайте mongodb.org . Но, в нашем проекте мы используем сторонний сервис который позволяет бесплатно использовать mongo базу данных с ограничением по объёму в 500mb.

Сервис называется Mongolab.com. Зарегистрируйтесь и создайте новую базу данных и пользователя для неё. Экран создания базы данных выглядит примерно так:

Mongolab создание базы данных
Mongolab создание базы данных

После создания базы данных не забудьте про пользователя для неё:

Пользователь для базы данных Mongolab

И наконец можно получить строку доступа к базе данных, она находится чуть выше переключателей в интерфейсе, выглядит примерно так: mongodb://:@ds027409.mongolab.com:27409/coffeeplaces

Вернёмся к нашему проекту, для операций с Mongo установите модуль Mongoose.

Модуль mongoose оперирует моделями, вы создаёте модель сущности, а как её стыковать с БД – задача mongoose. Для хранения моделей создайте папку db/models, а в ней файл Item.js с содержимым:

Для удобства работы с БД, соберём все необходимые методы в одном файле. Создайте в корне файл api.js с содержимым:

Пора обновить Heroku:

База данных

В базовом приложении есть файл ./routes/items замените содержимое на:

Готово)

Leave a Reply

Your email address will not be published. Required fields are marked *