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

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 работать становится очень просто.

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

Только зарегистрированные пользователи могут оставлять комментарии.  Войдите, пожалуйста.
обзор всего
4 месяцев назад
Извините а в каком видео у вас установка связей между моделями. Я вас на Udemy достал вопросами )) У меня пользователь при регистрации имеет такую модель: const { Schema, model } = require('mongoose') // импорт схемы и таблицы const User = new Schema({ username: { type: String, required: true }, // имя пользорвателя password: { type: String, required: true }, // пароль пользователя email: { type: String, unique: true, required: true }, // почта пользователя userData: [ // ссылка на таблицу пользователя { type: Array, ref: 'DataCrud' }, ], roles: [{ type: String, ref: 'Role' }], }) // название модели первый параметр // второй схема на основании которой создастся module.exports = model('User', User) Это вторая модель в которой будет личный кабинет с записями его расходов за день месяц и год const { Schema, model } = require('mongoose') const DataCrud = new Schema({ datepost: { type: String, required: true }, name: { type: String, required: true }, price: { type: Number, required: true }, }) module.exports = model('DataCrud', DataCrud) Как мне в первой модели правильно сослаться на вторую модель с записями
monsterlessons
4 месяцев назад
У меня нет видео про зависимости моделей. Вот статья например как такое делать. https://dev.to/mkilmer/how-create-relationships-with-mongoose-and-node-js-with-real-example-43ei
обзор всего
4 месяцев назад
Спасибо большое за ссылку. Просто я пилю свой небольшой проект по вашему курсу VueJS.VueX, Docker. Бекенд приходится делать параллельно. Ждём от Вас курс по Full Stack JS на udemy.
monsterlessons
4 месяцев назад
Что-то пока из-за ютуба я не успеваю делать курс. Надеюсь с марта где-то будет реалистичнее. 3 видео в неделю отнимают слишком много времени.
обзор всего
4 месяцев назад
Прочитал статью и понял как это делать. Но Поняв что mongo no sql. В статьях пишут, что связи создавать не стоит а тупо встраивать в одну сущность)
обзор всего
4 месяцев назад
будем ждать ваш курс. На ютубе чуть тяжеловато) там всё на английском
monsterlessons
4 месяцев назад
Это да, но имхо английский открывает слишком много возможностей в жизни.
обзор всего
4 месяцев назад
Да английский это круто. Мне на ваших курсах это очень нравится, когда вы включаете английские слова иногда.
Moe Green
3 лет назад
Маленькое несущественное замечание: В функции 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
3 лет назад
Да, вы правы callback правильнее. Порядок событий значения не имеет, так как connectDb асинхронный и просто описываем колбеки до того, как функция начнет отрабатывать.
evgeniy
4 лет назад
А можно видео как правильно готовить RethinkDB с драйвером rethinkdbdash? Спасибо за видео)
monsterlessons
4 лет назад
Конечно можно. Спасибо за идею, добавил в список будущих видео.
evgeniy
4 лет назад
Я извиняюсь, хотелось бы еще видео сравнение баз данных MongoDB vs RethinkDB. Плюсы/минусы, производительность и т.д. Заранее спасибо.
monsterlessons
4 лет назад
Спасибо за идею. Если в двух словах, то пока у вас не миллионы записей в базе, то вам должны быть абсолютно без разницы какую базу данных использовать. На мой вкус, у RethinkDB отличная админка и удобный синтаксис запросов по сравнению с MongoDB.
Иван Древаль
4 лет назад
Про SQL бы чего интересного :)
monsterlessons
4 лет назад
Спасибо за идею, добавил в список будущих видео.
Александр Анплеенко
4 лет назад
За такой способ подключения mongo, спасибо
monsterlessons
4 лет назад
На здоровье)