В этом упражнении мы продолжим предыдущее упражнение, где мы
разработали взаимодействие между приложением узла и сервером MongoDB.
В этом упражнении я собираюсь инкапсулировать несколько
операций с базой данных в собственный модуль узла,
файловый модуль узла,
а затем использовать его в моем приложении узла для взаимодействия с сервером.
В то же время, мы выполним несколько операций
на сервере, чтобы продемонстрировать, что мы сможем
взаимодействовать с сервером, используя наше приложение узла и драйвер узла MongoDB.
Чтобы начать работу, давайте перейдем к нашему проекту,
а затем создадим новый файл с именем operations.js.
Этот файл инкапсулирует все операции с базой данных,
четыре операции, которые я собираюсь выполнить вставку,
поиск, удаление и обновление документа в моей базе данных.
Теперь это будет организовано как файловый модуль узла,
который затем я буду использовать его в моем узловом приложении для доступа к серверу.
Итак, чтобы начать, позвольте
мне сначала потребовать assert,
в этом модуле узла,
и так как это происходит, чтобы быть модулем узла,
мы будем экспортировать несколько методов из модуля узла.
Первый метод будет вставлять документ, очевидно, как вы ожидали,
и это займет четыре параметра DB,
MongoDB, соединение с базой данных в моем приложении узла,
которое я получу в приложении узла.
Затем второй - это документ, который я хочу вставить.
Третий параметр - это коллекция, в которую я хочу вставить документ.
Последняя - это функция обратного вызова,
которая будет вызвана после завершения этой операции.
Затем давайте закроем функцию здесь,
и это по существу инкапсулирует метод вставки документа здесь.
Таким образом, это функция, которая экспортируется этим модулем узла здесь.
Теперь я также собираюсь включить несколько других методов здесь.
Вторым будет поиск документов.
Не один, а несколько документов.
Это я бы искал коллекцию и нашел все документы, которые находятся в коллекции.
Поэтому я принимаю только базу данных
и коллекцию в качестве двух параметров вместе с обратным вызовом.
Третья функция, которую я собираюсь реализовать экспорт отсюда, - это removedocument.
Это поддерживает операцию удаления,
и поэтому имя документа будет принимать базу данных, документ,
коллекцию и обратный вызов в качестве четырех параметров,
и мы будем вызывать обратный вызов после завершения операции.
Последним, конечно, является обновление документа.
Конечно, вы не обязательно должны делать это таким образом.
Я просто чувствовал, что это будет еще один способ иллюстрации того, как вы можете
инкапсулировать эти функции в свой собственный модуль узла.
Это просто реорганизация кода таким образом, который более удобен в использовании.
Таким образом, для экспорта,
для документа обновления он принимает БД,
некоторый способ идентификации документа в качестве второго параметра.
Третьим параметром является обновление,
а четвертым параметром является коллекция, в которой
существует этот документ, и обратный вызов.
Таким образом, четыре функции, которые будут экспортированы файлом operations.js.
Теперь, в рамках этих функций,
давайте реализовываем один за другим.
В документе вставки
первое, что я собираюсь сделать, это сказать
const collection, и он скажет коллекцию DB,
а параметр - это коллекция.
Итак, мы поищем там коллекцию.
Теперь это должно быть выполнено во всех четырех методах.
Итак, я собираюсь пойти и вставить этот код во все четыре метода здесь,
потому что это функция, которая мне нужна во всех них.
Итак, как только я получу коллекцию,
то, как вы помните из предыдущего упражнения,
я могу выполнять операции над коллекцией.
Итак, я скажу, что коллекция, вставка,
и это принимает в качестве первого параметра документ, который должен быть вставлен,
а второй параметр - обратный вызов с ошибкой и этим результатом.
Итак, теперь, когда этот документ
вставляется путем вызова метода вставки в коллекции базы данных,
метод вставки позвольте мне напомнить вам,
поддерживается драйвером MongoDB.
Итак, это метод, который мы используем здесь,
или это функция, которую мы используем здесь.
Итак, первое, что я собираюсь проверить на это, assertequal err, null.
Итак, я хочу убедиться, что у меня нет ошибки.
Поэтому я хочу убедиться, что ошибка равна нулю.
Если он не равен нулю,
то это будет распечатывать информацию, а затем выйти из приложения.
В этот момент я чувствую, что это нормально, чтобы справиться с этим, что позже,
мы увидим, как мы можем иметь глобальный способ обработки всех ошибок, когда мы
реализуем в следующем уроке другой способ доступа к базе данных MongoDB.
Теперь, после того, как
я сделаю это, я собираюсь реализовать,
я просто записать эту информацию.
Так что я скажу, консольный журнал и вставьте его.
Таким образом, эта информация будет распечатана на экране здесь, вставлен.
Теперь снова помните точки с запятой и все, что
важно, не забывайте их при вводе кода.
Итак, я скажу вставленный результат.
Этот объект результата, который возвращается,
будет иметь на нем свойство, называемое свойством результата,
и это свойство будет содержать значение.
Это свойство результата также является объектом JavaScript,
и это будет содержать свойство n, которое сообщает нам, сколько документов было вставлено.
Вот информация, которую я собираюсь распечатать здесь,
а потом мы перейдем к следующей строке и
скажем «документы в коллекцию».
Теперь это просто способ информировать пользователя о том, что эта операция прошла правильно,
а затем они передадут этот результат обратно в нашу вызывающую функцию.
Итак, мы вызовем обратный вызов, а затем результат будет параметром обратного вызова.
Таким образом, когда мы реализуем использование этой функции в нашем файле index.js,
мы будем предоставлять обратный вызов там, который
получит результат в качестве входящего параметра.
Итак, это для «InsertDocument».
Теперь, для «FindDocument
», что я собираюсь сделать, это сказать
«coll.find», и я собираюсь найти все документы.
Поэтому я дам здесь пустой объект JavaScript,
который будет соответствовать всем документам в коллекции, а затем я скажу:
«toArray», и это будет принимать в качестве параметра функцию обратного вызова,
и внутри этой функции обратного вызова, конечно,
я буду утверждать, что это не null,
и тогда мы скажем: «обратный вызов документов».
Мы просто передадим обратно извлеченные документы обратно в вызывающую функцию.
Теперь, для «RemoveDocument», я собираюсь сказать, «коллекция DeleteOne».
Итак, я попытаюсь найти первый документ, который
соответствует тому, что мы указали, а затем удалить его.
И тогда это займет, опять же,
функцию обратного вызова в качестве второго параметра,
и внутри этой функции обратного вызова
первое, что я проверяю, - убедиться, что ошибка не равна нулю.
А потом, скажем,
«консольный журнал удалил документ с запятой».
Мы использовали запятую здесь, потому что это объект JavaScript, поэтому,
если вы укажете консольный журнал, как это,
документ будет распечатан, а затем мы передадим
этот результат обратно через функцию обратного вызова.
И затем, наконец, для обновления мы собрать.UpdateOne.
Это метод, который поддерживает драйвер MongoDB.
Итак, я скажу: «Update.One document
», и второй параметр - это то, где мы
будем передавать в поля, которые нужно обновить.
И как это делается,
мы скажем: «Обновление двоеточия в долларах».
Таким образом, это займет информацию об обновлении, которую
я отправляю, а затем передаст ее в Update.One.
Первый — это документ, который необходимо обновить.
Второй — то, какие поля документа должны быть обновлены здесь.
И третий параметр равен нулю
, и последний параметр является функцией обратного вызова,
которая, очевидно, даст нам результат операции.
Итак, первое, что я собираюсь проверить, чтобы убедиться, что ошибка не равна нулю.
Затем я сделаю «журнал консоли обновил документ с помощью».
Теперь снова, консольные журналы исключительно для нас, чтобы
убедиться, что код делает то, что он делает.
Это никак не помогает.
Это только для нашей собственной информации.
На производственном сервере у
вас не было бы этих консольных журналов, возможно.
Вы можете отключить их. Так вот и всё.
Таким образом, четыре метода, поддерживаемые в этом конкретном модуле на основе файла узла вставки,
поиска, удаления и обновления.
Итак, теперь, когда мы реализовали этот файловый модуль узла,
давайте перейдем к файлу index.js,
а затем, чтобы использовать этот файловый модуль узла,
мне нужно потребовать это здесь.
Так что, я скажу: «Конст Дбопер требует».
Поскольку это файловый модуль узла, вы получаете полный путь к модулю узла,
и который в этом случае случается. /operations
, потому что он находится в той же папке, что и мой файл index.js.
Теперь, как только мы сделали это,
затем прямо здесь, эта функция,
этот код, который мы делали, чтобы получить доступ к базе данных теперь вставить,
мы будем использовать dboper, который мы только что реализовали для доступа к этой базе данных.
Итак, скажем, «dboper insert document
», и этот «insert document» принимает db в качестве первого параметра.
db здесь, это этот db, который пришел, когда мы вызываем соединение MongoClient.
Таким образом, db будет передан, так что
мой модуль узла операций знает, где получить доступ к базе данных.
Затем второй параметр является,
поэтому, если вы посмотрите на «вставить документ», вы увидите
, что второй параметр является документ, который будет вставлен.
Итак, я скажу: «Имя. «
Я просто собираюсь построить объект JSON или объект JavaScript здесь,
который будет автоматически сопоставляться с смежным объектом при его вставке.
И третий параметр, как вы видите,
«сбор документов db и обратный вызов».
Таким образом, третий параметр - это коллекция, а коллекция -
коллекция блюд, а последний - обратный вызов.
Вызов снова, как вы помните, получает результат.
Если оглянуться назад на ребенка реализован документ вставки,
то обратный вызов получил результат в качестве параметра.
Поэтому внутри этого обратного вызова мы будем обрабатывать это значение результата здесь.
Таким образом, когда придет значение результата, мы сделаем console.log.
Мы скажем вставить документ
обратной косой чертой N, и мы скажем результат OPS.
В OPS указывается количество операций вставки, которые были выполнены.
Таким образом, это еще один объект, который будет находиться на
объекте JavaScript результата, который передается обратно
в качестве параметра, и поэтому я просто собираюсь распечатать это значение.
Это даст нам некоторую информацию о том, что произошло.
Теперь, как только это будет завершено,
внутри этой функции обратного вызова я собираюсь вызвать следующую операцию базы данных.
Так что я скажу «dboper», а потом найду документы.
Затем я скажу dbdiss, а третий параметр - docs,
который является функцией обратного вызова.
Когда я получу документы, я собираюсь сделать
console.log, говорящий о найденных документах,
и мы просто заблокируем документы на экране.
Таким образом, это распечатает найденные документы.
Обратите внимание, что этот вызов находится внутри
функции обратного вызова, которая применяется для более раннего вызова функции,
так что это то, что я хочу, чтобы вы заметили конкретно.
Теперь, снова внутри этого вызова функции, они должны сделать это так, потому что до тех пор, пока
этот обратный вызов не будет вызван, мы не можем выполнить следующую операцию.
Итак, в этой следующей операции я собираюсь обновить документ, который я только что вставил.
Поэтому я скажу, что обновите документ, и я скажу Update Document DB,
а затем следующим параметром является документ,
и мне не нужно указывать весь документ, я могу указать только одно поле, а
затем найти документ, который соответствует этому конкретному полю.
То, что я собираюсь сделать, это следующий параметр - это обновление, которое должно быть предоставлено.
Итак, обновление - это то, какое поле я хочу обновить,
поэтому я собираюсь обновить
поле описания, сказав Updated Test,
а затем четвертый - это коллекция, которая является Блюдами,
а последний - функция обратного вызова, которая получает
документы в качестве возвращаемого значения или,
скорее, результата операции обновления, которую мы только что провели.
Затем внутри этой функции обратного вызова
я снова сделаю console.log, говорящий
обновленный документ обратной косой черты N. Обновленный документ будет передан
обратно в result.result в
этом свойстве объекта результата, который передается отслеживание.
Опять же обратите внимание, как вызовы становятся
вложенными внутри функций обратного вызова здесь.
Я хочу, чтобы вы заметили эту структуру
кода, потому что это то, к чему я вернусь в следующем упражнении.
Теперь после того, как
я это сделаю, я собираюсь найти документы,
поэтому позвольте мне просто скопировать это, а затем я собираюсь использовать тот же код здесь.
Так что скажу, найди документы.
Внутри здесь я снова собираюсь сказать, нашел обновленный документ.
Затем, наконец, когда я закончу с этим,
я просто вызову коллекцию db drop.
Поэтому я собираюсь удалить эту коллекцию посуды, чтобы я
очистил свою базу данных, чтобы у меня
больше ничего не было, потому что для следующего упражнения я хочу очистить
базу данных, а затем начать с более чистой базы данных.
Итак, я собираюсь очистить
коллекцию посуды, а затем это приведет к обратному вызову.
Поэтому внутри здесь я собираюсь сделать console.log, сказав,
сбросил коллекцию, а затем я просто распечатаю результат, который пришел.
Затем, наконец, закройте базу данных.
Обратите внимание, что структура кода,
документ вставки БД и внутри функции обратного вызова я собираюсь вызвать
следующую функцию и внутри
обратного вызова, который я собираюсь вызвать
следующую функцию и внутри следующей функции обратного вызова и так далее.
Итак, вы видите вложенный набор обратных вызовов здесь и
дерево структурированный вложенный набор обратных вызовов здесь.
Это то, на что я хочу, чтобы вы обратили внимание.
Давайте сохраним изменения и посмотрим на эту версию нашего приложения.
Возвращаясь к терминалу,
позвольте мне выполнить приложение.
Поэтому позвольте мне ввести NPM начало, и мы увидим этот результат.
Теперь из этого результата вы можете увидеть, что документ
вставляется в коллекцию, и это документ, который был найден.
На втором этапе
мы находим документ, поэтому, когда мы вызываем документ поиска БД,
так что это документ, который извлекается из моей коллекции.
Затем я прошу его обновить документ с
этим, а затем вы заметите, что он говорит обновленный документ, а затем
здесь он печатает результат или OPS, и он говорит, что N равен
одному числу, измененному как один, и это было в порядке.
Затем он распечатывает обновленный документ,
мы находим обновленный документ здесь, и это то, что печатается здесь,
и обратите внимание, в частности, что описание было обновлено.
Затем, наконец, он уронил коллекцию.
Таким образом, мы видим, как это приложение работает и может использовать
модуль узла, который мы реализовали, а затем выполняли различные операции базы данных.
Этим мы завершаем это упражнение.
В этом упражнении я продемонстрировал вам, как вы будете взаимодействовать с
вашим сервером MongoDB из вашего приложения узла.
Мы реализовали наш собственный модуль узла здесь, а затем использовали его
в нашем приложении узла, инкапсулируя
некоторые операции базы данных в этот модуль узла.
Это хорошее время для вас, чтобы сделать фиксацию Git с
узлом сообщения MongoDB пример части второй.