# Используем express с mongoose правильно

06:19
poster
В этом видео мы с вами разберем, как совместить express и mongoose.
Понравилось? Поделитесь с друзьями!
Понравилось?
Поделитесь с друзьями!
Комментарии
Текст видео

В этом видео мы с вами разберем, как совместить express и mongoose.

На данный момент у нас создано подключение в mongodb и модель User.

Итак, первое, что нам нужно сделать, это установить express.

yarn add express

Сначала, я бы хотел сказать, как не нужно подключать mongodb, потому что огромное количество гайдов делают это слишком сложно и неправильно. Если вы будете сначала запускать express, а потом внутри стартовать mongodb, то вам прийдется слушать колбек, так как подключение происходит асинхронно и не делать никаких обращений в базе до этого.

Это порождает дополнительные сложности, которых можно избежать, если стартовать express, только когда мы успешно подключились к mongodb.

Давайте попробуем.

Для начала закомментим все содержимое index.js. Импортируем express и создадим наш app.

const express = require('express')

const app = express()

Теперь, создадим 2 функции: connectDb и startServer.

const express = require('express')
const mongoose = require('mongoose')
const bluebird = require('bluebird')

const port = 3999
const app = express()
const startServer = () => {
  app.listen(port)
  console.log(`App started on port ${port}`)
}
const connectDb = () => {
  mongoose.Promise = bluebird

  const options = {
    useMongoClient: true
  }
  mongoose.connect('mongodb://localhost/testmongoose', options)
  return mongoose.connection
}

Теперь, мы можем вызвать connectDb и, при успешном подключении, вызвать startServer.

connectDb()
  .on('error', console.log)
  .on('disconnected', connectDb)
  .once('open', startServer)

Если мы запустим наш сервер, то мы получим сообщение, что мы успешно подключились к серверу.

Теперь, давайте проверим, что мы можем прочитать данные из базы и зарендерить их. Для этого опишем новый роут

app.get('/user', (req, res) => {
  res.json({user: 'Alex'})
})

Как мы видим, наш роут работает.

Теперь, давайте добавим вывод юзера из базы. У меня в базе есть user Alex, которого мы создавали до этого. Давайте его найдем с помощью нашей модели User и выведем.

app.get('/user', (req, res) => {
  User.findUserByName('alex', (err , user) => {
    res.json({user})
  })
})

Для получения юзера мы использовали findUserByName. Как мы видим, в браузере, мы получили нашего юзера в виде json.

С таким вариантом подключения mongodb к express работать становится очень просто.

Если у вас возникли какие-то вопросы или комментарии, пишите их прямо под этим видео.

Только зарегистрированные пользователи могут оставлять комментарии.  Войдите, пожалуйста.
Moe Green
11 месяцев назад
Маленькое несущественное замечание: В функции startServer() правильнее использовать callback - app.listen(port, () => console.log(`App started on port ${port}`)) И у меня вопрос. Важен ли порядок определения слушаемых событий в функции connectDb (): connectDb () .on('error', console.log) .on('disconnected', connectDb) .once('open', startServer)
monsterlessons
11 месяцев назад
Да, вы правы callback правильнее. Порядок событий значения не имеет, так как connectDb асинхронный и просто описываем колбеки до того, как функция начнет отрабатывать.
evgeniy
1год назад назад
А можно видео как правильно готовить RethinkDB с драйвером rethinkdbdash? Спасибо за видео)
monsterlessons
1год назад назад
Конечно можно. Спасибо за идею, добавил в список будущих видео.
evgeniy
1год назад назад
Я извиняюсь, хотелось бы еще видео сравнение баз данных MongoDB vs RethinkDB. Плюсы/минусы, производительность и т.д. Заранее спасибо.
monsterlessons
1год назад назад
Спасибо за идею. Если в двух словах, то пока у вас не миллионы записей в базе, то вам должны быть абсолютно без разницы какую базу данных использовать. На мой вкус, у RethinkDB отличная админка и удобный синтаксис запросов по сравнению с MongoDB.
Иван Древаль
1год назад назад
Про SQL бы чего интересного :)
monsterlessons
1год назад назад
Спасибо за идею, добавил в список будущих видео.
Александр Анплеенко
1год назад назад
За такой способ подключения mongo, спасибо
monsterlessons
1год назад назад
На здоровье)